我有PS命令,它压缩了上次提交中所有已更改的文件:
powershell "git archive -o "./../__updates/$(git log -1 --pretty=%B).zip" HEAD $(git diff --name-only HEAD^)"
现在,如何基于SHA压缩另一个提交,例如。 8272fa8
?
如何自动使用此命令,例如。每次提交后?
@Mark Adelsberger
我有2个提交:
承诺: 8272fa8
强: b50d426a01
其中:
8272fa8 有文件:
和 b50d426a01 有文件:
当我使用时:
git archive -o "./../__updates/$(git log -1 --pretty=%B).zip" 8272fa8 $(git diff --diff-filter=d --name-only b50d426a01^)
我得到了:
fatal: pathspec 'storage/cache.php' did not match any files
从最新的提交,为什么?
答案 0 :(得分:1)
如何基于SHA压缩另一个提交,例如。 8272fa8?
在archive
命令中,HEAD
是您可以为<tree-ish>
提供的一个值 - 即归档中要放入的内容。任何COMMIT
的SHA ID也是有效的<tree-ish>
,因此请将HEAD
替换为您的SHA ID值。
同样在diff
命令中HEAD^
表示&#34; HEAD
&#34;的父提交。只要您的提交具有父级,您就可以再次使用它来代替HEAD
。除了root提交之外的任何东西
powershell "git archive -o "./../__updates/$(git log -1 --pretty=%B).zip" <sha-id> $(git diff --name-only <sha-id>^)"
请注意,如果<sha-id>
的提交是合并,则会将其与第一个父级(其他其他更改合并到的分支)区分开来。
如果你的提交是根提交,那么差异根本就没有意义(你想要&#34;差异对空树&#34; ,无论如何都只会返回每个文件的添加内容,所以你只需要说
powershell "git archive -o "./../__updates/$(git log -1 --pretty=%B).zip" <sha-id>"
让你的脚本知道差异是跳过的另一个环节,并且在大多数情况下它不会找到&#34; root commit&#34;经常出现这种情况,因此手动归档根提交可能更容易,只需将脚本设置为假设父级(并且理想情况下,如果diff
出错,则优雅地失败)。 / p>
如何自动使用此命令,例如。每次提交后?
我有一种感觉,你将努力倾注到你后来发现的多余的东西上,但还可以。您可以在每次提交后通过设置post-commit钩子(repo&#39; .git/hooks
目录中的脚本)来运行此命令。见https://git-scm.com/book/gr/v2/Customizing-Git-Git-Hooks