git - zip更改了指定提交的文件

时间:2017-10-25 13:46:57

标签: git powershell github bitbucket

我有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 有文件:

  • index.php
  • assets / style.css
  • 图像/ logo.png

b50d426a01 有文件:

  • LIB / Image.php

当我使用时:

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

从最新的提交,为什么?

1 个答案:

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