我有一个在git pre-push hook上执行的脚本。里面有PowerShell脚本,它修改了存储库中的项目文件。该文件将在localy中正确修改,但该更改不会在git服务器上结束。
这是一个脚本:
#!C:/Program\ Files/Git/bin/sh.exe
branch=`git rev-parse --abbrev-ref HEAD`
if [ $branch = "development" ];
then
exec powershell.exe -NoProfile -ExecutionPolicy Bypass -File update_version.ps1 -mode dev
pwd
fi
exit
答案 0 :(得分:0)
作为phd said in a comment,你不能。 1 原因是git push
推送提交,而不是文件。
确实提交包含文件 - 每次提交都是所有该提交中文件的完整快照,因此git push
结束发送文件随着提交;但是这个问题的关键是git push
在你自己的Git存储库中找到了一些提交,你要推送的其他Git 不。您的Git打包这些提交 - 作者和日志消息,以前的提交哈希,源树的快照等等 - 并发送它们。预推钩用于测试是否发送这些提交。
您应该(请参阅脚注1)将预推送脚本写入检查以确保适当的版本信息到位,如果没有,则中止推送。然后,而不是运行git push
,运行my-script-that-updates-and-then-runs-git-push
。该脚本将根据需要进行更新和提交,然后运行git push
尽管检查成功,然后执行任何其他适当的操作。
1 “不能”是一个强有力的词。你可以,但只能通过我建议避免的Rube Goldberg machinery。