如何从选择提交后的git存储库中生成tar存档?
这个问题类似于Git archive all changes except first commit,但我需要.tar存档作为结果而不是git补丁文件。
说明: 我制作"模块"对于一个奇怪的PHP CMS,没有真正的编写扩展的机制。要运送我的模块,我必须只将修改后的文件发送给客户端,而我仍然必须在Git下拥有所有CMS文件(所有这些文件仅在第一次提交时添加)。
答案 0 :(得分:1)
所以,这个档案的收件人没有回购,但是确实有一些提交的内容,而你又发送了他可以解压缩的替代品了吗?
似乎git archive在Windows上的--output
选项无法告诉压缩器重定向,它正确地拒绝将压缩输出写入它认为是终端的东西,但这很容易解决了:
git archive -o update-old-new.tgz newcommit \
$(git diff --name-only --diff-filter=AM oldcommit..newcommit) | cat
最后| cat
是解决方法。
我忘记了archive
,但使用它意味着您不必首先结帐$ newcommit,所以这比早期的checkout;diff|tar
组合要好得多。
尽管如此,这还不能处理足够大的更新,以免在路径名中出现命令行限制或空格或其他恼人的字符。后退是
git checkout newversion
git diff --name-only --diff-filter=AM oldversion.. \
| tar Tczf - update-old-new.tgz
答案 1 :(得分:0)
在文件夹的顶层运行:
tar cvfz files-changed.tgz `git diff <newrev> <oldrev> --stat --name-only `
e.g
tar cvfz files-changed.tgz `git diff HEAD HEAD~3 --stat --name-only `