Git Clone: только файлы, пожалуйста?



Я хочу клонировать git РЕПО и не в конечном итоге с . Другими словами, Я просто хочу файлы. Есть ли способ сделать это?



git clone --no-checkout сделал прямо противоположное тому, что я хочу (мне дали только ).



Я пытаюсь сделать это для remote РЕПО, а не локальное, то есть это не дубликат "как сделать" экспорт git "(например, "экспорт svn") "(хотя решение может оказаться одинаковый.)

631   6  
git

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

    Ничего не найдено.