Я хочу клонировать репозиторий GIT и НЕ получить .git
каталог. Другими словами, мне просто нужны файлы. Есть ли способ сделать это?
git clone --no-checkout
сделал прямо противоположное тому, что я хочу (дал мне только .git
каталог).
Я пытаюсь сделать это для удаленного репо, а не для локального, что означает, что это не дубликат « Как сделать« экспорт git »(например,« svn export ») » (даже если решение может оказаться тем же).
git archive
теперь (4 квартал 2017 г.) более точный и не будет включать пустые папки.Ответы:
Команда git, которая будет наиболее близкой к тому, что вы ищете, будет
git archive
.См. Проект резервного копирования, который использует git : он будет включать в архив все файлы (включая подмодули, если вы используете
git-archive-all
сценарий)Затем вы можете использовать этот архив где угодно, возвращая вам только файлы, но не
.git
каталог.Если вам нужны папки и файлы только с первого уровня:
Чтобы перечислить только папки первого уровня удаленного репо:
Примечание: это не работает для GitHub (не поддерживается)
Поэтому вам нужно будет клонировать (неглубоко, чтобы ускорить шаг клонирования), а затем заархивировать локально :
Другой вариант - сделать неглубокий клон (как указано ниже), но разместить папку .git в другом месте.
Папка репо будет включать только файл без
.git
.Примечание:
git --git-dir
это вариант командыgit
, а неgit clone
.Обновление до Git 2.14.X / 2.15 (4 квартал 2017 г.): оно позволит избежать добавления пустых папок .
См. Коммит 4318094 (12 сентября 2017 г.) Рене Шарфе (``) .
Предложено: Джеффом Кингом (
peff
) .(Объединено Junio C Hamano -
gitster
- в коммите 62b1cb7 , 25 сентября 2017 г.)источник
git --git-dir=/dev/null clone --depth=1 /url/to/repo
git archive --remote=https://github.com/pornel/dssim.git @ | tar -t
получаюtar: This does not look like a tar archive
. Разве это не работает с GitHub? Кроме того, что это@
значит?@
: я удалил его. Также GitHub не поддерживает удаленный доступgit archive
: я отредактировал ответ, чтобы предложить альтернативу.взято отсюда
источник
--format=tar
не нужно. "tar" - вывод по умолчанию, указывать не нужно.tar x
достаточновы можете создать неглубокий клон, чтобы получить только последние несколько ревизий:
затем либо просто удалите каталог .git, либо используйте его
git archive
для экспорта дерева.источник
Почему бы не выполнить клонирование, а затем удалить
.git
каталог, чтобы у вас была только пустая рабочая копия?Изменить: Или на самом деле зачем вообще использовать клон? Это немного сбивает с толку, когда вы говорите, что хотите репозиторий git, но без
.git
каталога. Если вы имеете в виду, что вам просто нужна копия некоторого состояния дерева, почему бы не сделать этоcp -R
в оболочке вместо клона git, а затем удалить его.git
.источник
Похоже, вам просто нужна копия исходного кода. Если да, то почему бы просто не скопировать каталог и исключить каталог .git из копии?
источник
git checkout -f
Есть другой способ сделать это, отделив репо от рабочего дерева.
Этот метод полезен, если вам нужно регулярно обновлять эти файлы git без git. Например, я использую его, когда мне нужно проверить исходные файлы и создать артефакт, затем скопировать артефакт в другое репо только для развертывания на сервере, а также я использую его при отправке исходного кода на сервер, когда мне нужно исходный код для проверки и встраивания в каталог www.
Мы сделаем две папки, одну для git и одну для рабочих файлов:
инициализировать чистый репозиторий git:
Затем создайте перехватчик post-receive:
Отредактируйте пост-прием в своем любимом редакторе:
Добавьте это как пульт:
Теперь каждый раз, когда вы нажимаете на это голое репо, он проверяет рабочее дерево
/workingfiles/
. Но/workingfiles/
сам по себе не находится под контролем версий; работаетgit status
в/workingfiles/
выдаст ошибкуfatal: Not a git repository (or any parent up to mount point /data)
. Это просто файлы.В отличие от других решений,
rm -r .git
команда не нужна, поэтому, если/workingfiles/
есть другое репозиторий git, вам не нужно беспокоиться о том, что команда, используемая для удаления других файлов git репо.источник
git --work-tree = / tmp / files_without_dot_git clone --depth = 1 https://git.yourgit.your.com/myawesomerepo.git / tmp / deleteme_contents_of_dot_git
источник
Нет необходимости использовать git в att, просто добавьте "/ zipball / master /" к URL-адресу ( источнику ).
Скачивание
Это решение наиболее близко к кнопке "Загрузить ZIP" на странице github. Одно из преимуществ - отсутствие каталога .git. Другой - он загружает один ZIP-файл вместо каждого файла по одному, и это может иметь огромное значение. Это можно сделать из командной строки Wget:
wget -O "$(basename $REPO_URL)".zip "$REPO_URL"/zipball/master/
. Единственная проблема в том, что в некоторых репозиториях может вообще не быть основной ветки. В этом случае «master» в URL следует заменить соответствующей веткой.Распаковка
После того, как ZIP-файл существует, окончательное имя распакованного каталога все еще может быть довольно странным и неожиданным. Чтобы исправить это, этот скрипт может извлечь имя и
mv
добавить кbasename
URL-адресу. Финалscript.sh
может выглядеть примерно так (оценка за работу с пробелами):Поддержание
Этот подход должен работать «только с файлами», и он отлично подходит для быстрого одноразового доступа к небольшим репозиториям.
Однако. Если исходный код довольно большой, и единственная возможность обновить - это загрузить и перестроить все, то (насколько мне известно) нет возможности обновить
.git
каталог без обновления , поэтому полное репо нужно загрузить снова. Тогда лучшее решение - как уже объяснил VonC - придерживаться неглубокой копииgit clone --depth 1 $REPO_URL
. Но что дальше? Чтобы «проверить наличие обновлений» см. Ссылку , а для обновления см. Отличный ответ в стиле вики .источник