关于查找:没有Git元数据的Tarballing

Tarballing without Git metadata

我的源代码树包含几个使用Git源代码管理的目录,我需要对整个目录树进行tarball处理,不包括对Git元数据或自定义日志文件的任何引用。

我想我可以使用find/egup/xargs/tar的组合,但是tar文件包含.git目录和*.log文件。

这就是我所拥有的:

1
find -type f . | egrep -v '\.git|\.log' | xargs tar rvf ~/app.tar

有人能解释我的误解吗?tar为什么处理find和egup正在过滤的文件?

我对其他技术也很开放。


当文件数量增加到一个以上的xargs命令时,您会得到一个令人讨厌的惊喜:然后您将首先对第一个文件生成tar文件,然后用其余文件覆盖相同的tar文件。

GNU TAR有--exclude选项,可以解决这个问题:

1
tar cvf ~/app.tar --exclude .git --exclude"*.log" .


您可以直接使用tar选项—排除VCS:

1
2
--exclude-vcs:
          Exclude version control system directories

例如:

1
tar cvfj nameoffile.tar.bz2 directory/ --exclude-vcs

它与Git一起工作。


尝试如下操作:

1
git archive --format=tar -o ~/tarball.tar -v HEAD

添加您的.log文件以及其他不想打包到.gitignore文件中的文件。


要排除版本控制系统目录,请执行以下操作:

tar --exclude-vcs

这将排除SVN、Git元文件等。


较新的GNU tar可以使用标志--exclude vcs自动排除版本控制目录。这也将处理.git。


[耳光]呸!要查找的参数顺序错误!我没有看到警告,因为它们从屏幕上呼啸而过。这使得''通过白鹭,这导致焦油吞没了一切。

这将教会我如何在冗长的调试中淹没重要的消息。

这工作:

1
find . -type f | egrep -v '\.git|\.log' | xargs tar cvf ~/app.tar


如果没有grep你可以做到。查找功能强大

1
 find . -type f -not \( -iname".git" -or -iname".log" \) | xargs ...


Git存档可能就是你要找的。


从应用程序目录外执行此操作:

1
tar cvfz app.tar.gz --exclude".git/*" --exclude".git" app/

对我来说,我需要的是.gitignore的内容:

tar cvfz $PROJECT.tar.gz --exclude-from=$PROJECT/.gitignore $PROJECT

--exclude-from正在读取文件的内容,并将其中列出的模式排除在外。