Ответы:
Посмотрите сначала на 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если поддерживается).