Ответы:
Посмотрите сначала на git help archive
. archive
команда git, позволяющая создавать архивы, содержащие только файлы, отслеживаемые git Вероятно, то, что вы ищете. Один пример приведен в конце справочной страницы:
git archive --format=tar --prefix=git-1.4.0/ v1.4.0 | gzip >git-1.4.0.tar.gz
Самый простой ответ: Добавить --exclude-vcs
--exclude-VCS
Это исключает все каталоги системы контроля версий
Лично я пользуюсь
tar -zcvf foo.tar.gz ./FOLDER_NAME --exclude-vcs
так что все, что вам нужно сделать, это добавить --exclude-vcs в конце команды.
tar --exclude-vcs -zcvf foo.tar.gz ./FOLDER_NAME
Если вы хотите, чтобы в архив входили файлы, отслеживаемые git, но не сам git-репозиторий или любой сгенерированный или иным образом неотслеживаемый файл, используйтеgit archive
.
Если вы специально хотите исключить, .git
но включить все остальное, в Linux, FreeBSD, OSX или Cygwin, у tar есть простая опция для исключения каталога:
tar -c --exclude .git -f - foo | gzip >foo.tgz
С GNU tar (то есть под Linux или Cygwin) вы можете сократить это до tar czf foo.tgz --exclude .git foo
.
POSIX способ создания архивов есть pax
.
pax -w -t -s '!.*/\.git$!!' -s '!.*/\.git/.*!!' foo | gzip >foo.tgz
git
Компилируется ли в какой-либо системе, где tar
это не доступно? :-)
tar
нет --exclude
опций, таких как OpenBSD (который, по общему признанию, дублирует s
опцию pax , но это не общее расширение синтаксиса команды tar).
Благодаря ответу на один из моих вопросов я нашел другое решение. Итак, для полноты картины, вот решение, использующее find
:
find . -path './.git' -prune -o -print |
tar -czvf ../archive.tgz --no-recursion -T -
И если вы хотите исключить возможные .git
папки внутри (sub) + folder:
find . -path '*/.git' -prune -o -print |
tar -czvf ../archive.tgz --no-recursion -T -
Последнее также может быть достигнуто через:
find . -type d -name '.git' -prune -o -print |
tar -czvf ../archive.tgz --no-recursion -T -
Очень удобно, если вы можете использовать другие методы фильтрации find
, например, дату модификации, разрешения, ...
(Как часто предполагается, правильно сформированные имена файлов, в противном случае вам нужно использовать нулевые байты в качестве разделителей, которые могут означать -print0
для find
и --null
для, tar
если поддерживается).