Answers:
首先看看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(它确实复制了pax的s
选项,但这不是常见的tar命令语法扩展名)。
多亏了我的一个回答,我才找到了另一个解决方案。因此,出于完整性考虑,以下是使用以下解决方案的解决方案find
:
find . -path './.git' -prune -o -print |
tar -czvf ../archive.tgz --no-recursion -T -
如果要排除.git
(子)+文件夹中的可能文件夹:
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
如果支持的话)。