没有Git元数据的Tarballing
我的源代码树包含了几个使用Git源代码控制的目录,我需要压缩整个树,不包括任何对Git元数据或自定义日志文件的引用。
我以为我会去使用find / egrep / xargs / tar的组合,但不知何故tar文件包含.git目录和* .log文件。
这是我的:
find -type f . | egrep -v '\.git|\.log' | xargs tar rvf ~/app.tar
有人能解释我在这里的误解吗? 为什么tar处理find和egrep正在过滤的文件?
我也接受其他技术。
当文件数增加到一个以上的xargs命令时,你会得到一个令人讨厌的惊喜:然后你将首先制作第一个文件的tar文件,然后用其余的文件覆盖相同的tar文件。
GNU tar有–exclude选项可以解决这个问题:
tar cvf ~/app.tar --exclude .git --exclude "*.log" .
您可以直接使用tar选项–exclude-vcs:
--exclude-vcs: Exclude version control system directories
例如:
tar cvfj nameoffile.tar.bz2 directory/ --exclude-vcs
它适用于Git。
尝试这样的事情:
git archive --format=tar -o ~/tarball.tar -v HEAD
将你的.log文件和其他你不想打包的东西加到你的.gitignore文件中。
要排除版本控制系统目录:
tar --exclude-vcs
这将排除svn,git元文件等
[巴掌] Bah! 要查找的参数是错误的顺序! 我没有看到警告,因为他们从屏幕上嗖嗖起来。 这允许'。' 通过egrep,导致焦油沾上一切。
这将教会我淹没在详细debugging中的重要信息。
这工作:
find . -type f | egrep -v '\.git|\.log' | xargs tar cvf ~/app.tar
较新的GNU tar可以select使用flag –exclude-vcs自动排除版本控制目录。 这也会照顾.git。
你可以做到这一点,没有grep。 发现是强大的
find . -type f -not \( -iname ".git" -or -iname ".log" \) | xargs ...
git-archive可能是你正在寻找的东西。
为了从app目录之外完成它:
tar cvfz app.tar.gz --exclude ".git/*" --exclude ".git" app/
对我而言, .gitignore
内容就是我所需要的:
tar cvfz $PROJECT.tar.gz --exclude-from=$PROJECT/.gitignore $PROJECT
--exclude-from
正在读取文件的内容,并排除列出的模式