Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
git-zip指定提交的已更改文件_Git_Powershell_Github_Bitbucket - Fatal编程技术网

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

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具有以下文件:

我有一个PS命令,用于压缩上次提交的所有更改文件:

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命令。但我不确定这是否有时会引起重命名/移动方面的麻烦。对不起,我的英语,我更新了问题以了解更多细节;