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文件中的文件。
要排除版本控制系统目录,请执行以下操作:
这将排除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/ |
对我来说,我需要的是