没有第一次/初始提交的Git存档

时间:2014-06-12 10:05:38

标签: git git-archive

如何从选择提交后的git存储库中生成tar存档?

这个问题类似于Git archive all changes except first commit,但我需要.tar存档作为结果而不是git补丁文件。

说明: 我制作"模块"对于一个奇怪的PHP CMS,没有真正的编写扩展的机制。要运送我的模块,我必须只将修改后的文件发送给客户端,而我仍然必须在Git下拥有所有CMS文件(所有这些文件仅在第一次提交时添加)。

2 个答案:

答案 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 `