GIT - скопировать новейшую ветку в другой каталог

Я прочитал документацию по GIT, но не мог понять, как просто скопировать последнюю версию кода в другой каталог (или развернуть его). Конечно, я мог бы просто copy -r code /path/to/another/dir, но затем он копирует все другие файлы, созданные GIT. И мне это не нужно. Так есть ли простой способ просто скопировать необработанные файлы без всех этих скрытых файлов (или копий оригинальных файлов)?

2 ответа

Решение

Это один из способов сделать это:

mkdir /path/to/target/dir
git archive master | tar x -C /path/to/target/dir

git archive Команда обычно генерирует архивный файл из содержимого хранилища. Он сбрасывает в архив на стандартный вывод, который вы обычно перенаправляете в файл. Здесь мы немного подрываем команду: вместо перенаправления мы немедленно извлекаем ее в указанную директорию. Целевой каталог должен быть создан первым.

Тем не менее, вы, кажется, хотите это для развертывания вашего проекта. Лично я использую сам Git для развертывания проектов. Таким образом, вы можете легко обновить и откатиться с помощью команд Git. Конечно, .git каталог будет существовать в каталоге развертывания, с другой стороны, простая копия не удалит файлы, которые были удалены в хранилище, они останутся в месте назначения.

Наконец, вас может заинтересовать мой личный фаворит: использование ловушки после получения для удаленного развертывания проектов.

Вариант 1: Исключить.git подкаталог

Предполагая, что у вас есть стандартные настройки для вашего репозитория Git, вы можете просто скопировать все в корневой каталог вашего проекта, но исключить .git подкаталог.

Видимо, вы можете сделать это с помощью терминала bash, используя rsync:

rsync -av --exclude='.git' source destination

но я не уверен, как вы могли бы сделать это с Windows copy,

Вариант 2: экспорт архива git

Другой вариант заключается в использовании git archive:

git archive --format zip --output "output.zip" master -0

даст вам несжатый архив (-0 это флаг для несжатого). Проблема в том, что вы должны извлечь файлы из архива.

Если у вас есть доступ к инструментам Unix в чем-то вроде оболочки bash или Cygwin, вы также можете использовать эти инструменты Unix в ответе janos. Смотрите также Как сделать "git export" (например, "svn export").

# Вариант 3: использовать git ls-файлы

Редактировать на самом деле возникают проблемы с этим, потому что я передаю аргументы cp в неправильном порядке (файлы в качестве целевых каталогов, а не источников), поэтому оставьте это сейчас.

Другой вариант - получить список всех файлов, которые Git отслеживает в вашей рабочей копии, а затем передать их в качестве аргумента команде копирования. Вот пример с Unix cp:

git ls-files | xargs cp <destination-root>
Другие вопросы по тегам