Git Clone: только файлы, пожалуйста?
Я хочу клонировать git РЕПО и не в конечном итоге с . Другими словами, Я просто хочу файлы. Есть ли способ сделать это?
git clone --no-checkout сделал прямо противоположное тому, что я хочу (мне дали только ).
Я пытаюсь сделать это для remote РЕПО, а не локальное, то есть это не дубликат "как сделать" экспорт git "(например, "экспорт svn") "(хотя решение может оказаться одинаковый.)
6 ответов:
команда git, которая была бы ближе всего от того, что вы ищете, будет
git archive.
Смотрите резервное копирование проекта, который использует git: он будет включать в архив все файлы (включая подмодули, если вы используетеgit-archive-allсценарий)затем вы можете использовать этот архив в любом месте, возвращая вам только файлы, нет .
git archive --remote=<repository URL> | tar -tЕсли вам нужны папки и файлы просто с первого уровня:
git archive --remote=<repository URL> | tar -t --exclude="*/*"чтобы перечислить только папки первого уровня удаленного РЕПО:
git archive --remote=<repository URL> | tar -t --exclude="*/*" | grep "/"Примечание:не работает для GitHub (не поддерживается)
так что вам понадобится клонировать (неглубоко, чтобы ускорить шаг клонирования), а затем архивировать локально:
git clone --depth=1 [email protected]:xxx/yyy.git cd yyy git archive --format=tar aTag -o aTag.tar
другой вариант - сделать мелкий клон (как указано ниже), но найти его .папки в Git в другом месте.
git --git-dir=/path/to/another/folder.git clone --depth=1 /url/to/repoпапка РЕПО будет включать только файл, без
.git.Примечание:
git --git-dirвариант командаgit, а неgit clone.
обновление с Git 2.14.X / 2.15 (Q4 2017): это будет убедитесь в том, чтобы не добавлять пустые папки.
"
git archive", особенно при использовании с pathspec, хранится пустой каталог в его выводе, хотя Сам ГИТ никогда так не делает.
Это было исправлено.посмотреть совершить 4318094 (12 сентября 2017) by Шарфе Рене (`).
Предложенный-by:Джефф Кинг (peff).
(слитый Junio C Hamano--gitster-- на commit 62b1cb7, 25 сентября 2017)
archiveне добавлять пустые каталоги в архивв то время как git не отслеживает пустые каталоги,
git archiveможно обманом положить некоторые в архивы.
Хотя это поддерживается базой данных объектов, она не может быть представлена в индексе, и поэтому вряд ли это произойдет в дикой природе.поскольку пустые каталоги не поддерживаются git, они также не должны быть записано в архивы.
Если пустой каталог действительно нужен, то его можно отслеживать и архивировать, поместив пустой в нем.
git archive --format=tar --remote=<repository URL> HEAD | tar xf -принято от здесь
вы можете создать мелкий клон, чтобы только получить последние изменения:
git clone --depth 1 git://urlзатем либо просто удалить .каталог git или использовать
git archiveдля экспорта вашего дерева.
Почему бы не выполнить клонирование, а затем удалить
.gitкаталог, так что у вас просто есть голая рабочая копия?Edit: или на самом деле зачем вообще использовать клон? Это немного сбивает с толку, когда вы говорите, что хотите git РЕПО, но без . Если вы имеете в виду, что вам просто нужна копия некоторого состояния дерева, то почему бы не сделать
cp -Rв оболочке вместо клона git, а затем удалите.gitдалее.
похоже, вам просто нужна копия исходного кода. Если да, то почему бы просто не скопировать каталог и исключить его .каталог git из копии?
есть еще один способ сделать это, разделив РЕПО из рабочего дерева.
этот метод полезен, если вам нужно регулярно обновлять эти файлы git-less git. Например, я использую его, когда мне нужно проверить исходные файлы и построить артефакт, а затем скопировать артефакт в другое РЕПО только для развертывания на сервере, а также использовать его при отправке исходного кода на сервер, когда я хочу, чтобы исходный код был извлечен и встроен в каталог www.
мы сделаем две папки, один для git один для рабочих файлов:
mkdir workingfiles mkdir barerepo.gitинициализировать голый git РЕПО:
cd barerepo.git git --bare initзатем создайте крюк после получения:
touch hooks/post-receive chmod ug+x hooks/post-receiveРедактировать пост-получить в вашем любимом редакторе:
GIT_WORK_TREE=/path/to/workingfiles git checkout -f # optional stuff: cd down/to/some/directory [do some stuff]добавить это в качестве пульта ДУ:
git remote add myserver ssh://user@host:/path/to/barerepo.gitтеперь каждый раз, когда вы нажимаете на это голое РЕПО, он будет проверять рабочее дерево на
/workingfiles/. Но/workingfiles/сам не находится под контролем версий; работаетgit statusна/workingfiles/выдаст ошибкуfatal: Not a git repository (or any parent up to mount point /data). Это просто обычные файлы.в отличие от других решений не нужна, так что если
/workingfiles/это какой-то другой git repo вам не нужно беспокоиться о команде, используемой для удаления файлов git другого РЕПО.
Comments