git-zip指定提交的已更改文件
我有一个PS命令,用于压缩上次提交的所有更改文件:git-zip指定提交的已更改文件,git,powershell,github,bitbucket,Git,Powershell,Github,Bitbucket,我有一个PS命令,用于压缩上次提交的所有更改文件: powershell "git archive -o "./../__updates/$(git log -1 --pretty=%B).zip" HEAD $(git diff --name-only HEAD^)" 现在,如何基于SHA压缩另一个提交,例如8272fa8 我怎样才能自动使用这个命令,例如在每次提交之后 @马克·阿德尔斯伯格 我有两项承诺: 提交:8272fa8 强:b50d426a01 其中: 8272fa8具有以下文件:
powershell "git archive -o "./../__updates/$(git log -1 --pretty=%B).zip" HEAD $(git diff --name-only HEAD^)"
现在,如何基于SHA压缩另一个提交,例如8272fa8
我怎样才能自动使用这个命令,例如在每次提交之后
@马克·阿德尔斯伯格
我有两项承诺:
提交: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
从最新的提交,为什么
如何基于SHA压缩另一个提交,例如8272fa8
在存档命令中,HEAD是一个值,您可以为-指定要放入存档中的内容。任何提交的SHA ID也是有效的,因此用SHA ID值替换HEAD
同样,在diff命令中,HEAD^表示HEAD的父提交。只要您的提交有一个父级,您就可以再次使用它的SHA代替HEAD。所以对于根提交以外的任何内容
powershell "git archive -o "./../__updates/$(git log -1 --pretty=%B).zip" <sha-id> $(git diff --name-only <sha-id>^)"
注意,如果提交是一个合并,这将使它与它的第一个父级(合并了其他更改的分支)不同
如果您的提交是根提交,那么diff就毫无意义了,您可能希望与空树进行diff,而空树只会返回每个文件的添加,所以您可以简单地说
powershell "git archive -o "./../__updates/$(git log -1 --pretty=%B).zip" <sha-id>"
让您的脚本知道差异是另一个需要跳转的难题,在大多数情况下,它不会经常找到根提交案例,因此手动归档根提交可能更容易,只需将脚本设置为假设存在父级,理想情况下,如果差异发生错误,则可以正常失败
如何自动使用此命令(例如每次提交后)
我有一种感觉,你们正在把精力投入到一些你们以后会发现是多余的东西上,但没关系。您可以在每次提交后通过在repo的.git/hooks目录中设置一个post-commit-hook脚本来运行它。请参见您好,谢谢您的回复!稍后我将检查钩子,首先我要创建存档命令:当我将第一个选项与diff一起使用时,我无法创建zip,当稍后创建一些文件时:/是否可以修复它?我知道第二个命令,但我只需要在这个zip文件中更改/新建文件,而不是全部;当你说我不能创建zip文件时,我不明白你说的是什么。后来创建的一些文件,你能澄清一下失败的条件吗?正如我所想,有一件事可能会导致一个问题是文件删除;因此,您可以尝试添加-diff filter=d来执行diff命令。但我不确定这是否有时会引起重命名/移动方面的麻烦。对不起,我的英语,我更新了问题以了解更多细节;