没有 Git 元数据的压缩包
Posted
技术标签:
【中文标题】没有 Git 元数据的压缩包【英文标题】:Tarballing without Git metadata 【发布时间】:2011-03-05 09:56:10 【问题描述】:我的源代码树包含几个使用 Git 源代码控制的目录,我需要对整个树进行 tar 压缩,不包括对 Git 元数据或自定义日志文件的任何引用。
我以为我可以使用 find/egrep/xargs/tar 的组合,但不知何故,tar 文件包含 .git 目录和 *.log 文件。
这就是我所拥有的:
find -type f . | egrep -v '\.git|\.log' | xargs tar rvf ~/app.tar
有人可以在这里解释我的误解吗?为什么 tar 处理 find 和 egrep 正在过滤的文件?
我也对其他技术持开放态度。
【问题讨论】:
【参考方案1】:git-archive 可能就是您要找的。p>
【讨论】:
可能不会。因为它在源代码树中有多个 git。【参考方案2】:你可以在没有 grep 的情况下做到这一点。 find 很强大
find . -type f -not \( -iname ".git" -or -iname ".log" \) | xargs ...
【讨论】:
问题是我的查找参数。看我的回答。感谢您的选择。【参考方案3】:试试这样的:
git archive --format=tar -o ~/tarball.tar -v HEAD
将您的 .log 文件和您不想打包到 .gitignore 文件中的所有其他内容添加到您的 .gitignore 文件中。
【讨论】:
很好,有没有办法在不提交代码的情况下获取代码快照?即使文件没有暂存或提交,我也想归档当前目录?【参考方案4】:[打耳光]呸!要查找的参数顺序错误!我没有看到警告,因为它们从屏幕上消失了。这允许'。通过 egrep 导致 tar 吞下所有东西。
这将教会我在详细调试中淹没重要消息。
这行得通:
find . -type f | egrep -v '\.git|\.log' | xargs tar cvf ~/app.tar
【讨论】:
【参考方案5】:当文件数量增加到多个xargs
命令时,您会感到非常惊讶:然后您将首先制作第一个文件的 tar 文件,然后用其余文件覆盖相同的 tar 文件。
GNU tar
有 --exclude
选项可以解决这个问题:
tar cvf ~/app.tar --exclude .git --exclude "*.log" .
【讨论】:
【参考方案6】:排除版本控制系统目录:
tar --exclude-vcs
这将排除 svn、git 元文件等。
【讨论】:
【参考方案7】:对于从应用程序目录之外执行此操作:
tar cvfz app.tar.gz --exclude ".git/*" --exclude ".git" app/
【讨论】:
【参考方案8】:你可以直接用tar选项--exclude-vcs试试:
--exclude-vcs:
Exclude version control system directories
例如:
tar cvfj nameoffile.tar.bz2 directory/ --exclude-vcs
它适用于 Git。
【讨论】:
谢谢,但我的 tar 版本“不支持选项 --exclude-vcs”。 @zaf yes = 仅限 GNU tar。 MacOSX 附带的 bsdtar 没有它。 @Marko Aha,感谢您启发我。这些细节总是困扰着我。【参考方案9】:较新的 GNU tar 可以使用标志 --exclude-vcs 自动排除版本控制目录。这也会处理 .git。
【讨论】:
【参考方案10】:对我来说,.gitignore
内容正是我所需要的:
tar cvfz $PROJECT.tar.gz --exclude-from=$PROJECT/.gitignore $PROJECT
--exclude-from
正在读取文件的内容 - 并排除那里列出的模式
【讨论】:
还有 --exclude-vcs-ignores 从 VCS 忽略文件中读取排除模式。以上是关于没有 Git 元数据的压缩包的主要内容,如果未能解决你的问题,请参考以下文章
MISC:压缩包取证(zip爆破明文攻击伪加密CRC32碰撞)
MISC:压缩包取证(zip爆破明文攻击伪加密CRC32碰撞)
MISC:压缩包取证(zip爆破明文攻击伪加密CRC32碰撞)