tar没有.git文件的文件夹吗?


16

如果我将tar文件夹存储为tar,可以在不包含.git相关文件的情况下这样做吗?如果没有,我将如何通过命令执行该操作?

Answers:


23

首先看看git help archivearchive是一个git命令,它允许仅包含git跟踪文件的档案。可能是您要找的东西。手册页末尾列出了一个示例:

git archive --format=tar --prefix=git-1.4.0/ v1.4.0 | gzip >git-1.4.0.tar.gz

6
这只会存档根git repo。如果使用了子模块-它们的目录将为空。
斯坦(Stann)2012年

@Stann:谢谢另一个子模块用户
Mark K Cowan

22

最简单的答案:添加 --exclude-vcs

--exclude-vcs

这不包括所有版本控制系统目录

我个人使用

tar -zcvf foo.tar.gz ./FOLDER_NAME --exclude-vcs

因此,您需要做的就是在命令末尾添加--exclude-vcs。


我想所有已知的?;)
phk

3
GNU / Linux上的参数之前,所有选项都必须在一起。
乔什·哈布达斯

2
如针对GNU / Linux所述tar --exclude-vcs -zcvf foo.tar.gz ./FOLDER_NAME
Michael Irey,

20

如果您希望归档文件包含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

是否可以gittar不可用的任何系统上进行编译?:-)
斯特凡·吉梅内斯

1
@StéphaneGimenez可能不是。但是,它确实可以在tar没有--exclude选项的系统上进行编译,例如OpenBSD(它确实复制了pax的s选项,但这不是常见的tar命令语法扩展名)。
吉尔(Gilles)'所以

0

多亏了我的一个回答,我才找到了另一个解决方案。因此,出于完整性考虑,以下是使用以下解决方案的解决方案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例如修改日期,权限等),则非常方便

(正如经常合式的文件名被假定,否则你需要用空字节作为分隔符这可能意味着-print0find--null用于tar如果支持的话)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.