自选择提交以来,如何从 git 存储库制作 tar 存档?
这个问题类似于Git 存档除了第一次提交之外的所有更改,但我需要 .tar 存档,因此不是 git 补丁文件。
说明:我为一个奇怪的 PHP CMS 制作“模块”,没有真正的机制来编写扩展。要发送我的模块,我必须只将修改后的文件发送给客户端,而我仍然必须在 Git 下拥有所有 CMS 文件(仅在第一次提交时添加)。
自选择提交以来,如何从 git 存储库制作 tar 存档?
这个问题类似于Git 存档除了第一次提交之外的所有更改,但我需要 .tar 存档,因此不是 git 补丁文件。
说明:我为一个奇怪的 PHP CMS 制作“模块”,没有真正的机制来编写扩展。要发送我的模块,我必须只将修改后的文件发送给客户端,而我仍然必须在 Git 下拥有所有 CMS 文件(仅在第一次提交时添加)。
所以,这个档案的接收者没有 repo,但有一些提交的内容,你正在发送他可以解压的替代品?
似乎 git archive --output
在 windows 上的选项无法告诉压缩器重定向,它适当地拒绝将压缩输出写入它认为是终端的地方,但这很容易解决:
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
在文件夹的顶层运行它:
tar cvfz files-changed.tgz `git diff <newrev> <oldrev> --stat --name-only `
例如
tar cvfz files-changed.tgz `git diff HEAD HEAD~3 --stat --name-only `