将推送内容的一部分推送到git服务器

时间:2018-04-24 14:15:48

标签: git git-bash githooks

我有一个在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 

1 个答案:

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