git在pre-push hook中提交

时间:2014-01-24 13:55:30

标签: git githooks

我在pre-push hook中添加了类似的内容:

gs0=$(git status)
pip-dump
gs1=$(git status)
if [ "gs0" != "gs1" ]
then
    git commit -m "pip-dump"
fi

(这是更新我的点数要求文件)

似乎推送不是推送新提交,而是HEAD在脚本开头处的那个推送。

如何解决这个问题?

1 个答案:

答案 0 :(得分:17)

你不能:push命令在调用钩子之前确定要提交哪些提交,如果钩子退出0则推送它。

我看到三个选项:

  1. 退出非零,告诉用户“推送被拒绝,因为我添加了提交”
  2. 退出零,告诉用户“推送已完成,但您需要再次推送,因为我添加了提交”
  3. 在添加新提交之后,在钩子内做另一个(不同的)推送,注意你的钩子不会无休止地递归,因为“内部”推动运行钩子,决定做另一个“内部再次”推动等然后,在宣布你必须进行“内部”推送以获得发送的额外提交后,退出非零,中止“外部”推送。
  4. 我个人的偏好是第一个。预推钩是意味着作为“验证此推送是否正常”操作,而不是“改变此推动意味着某些其他不同的推动”操作。这意味着你不会违背软件的“意图”。使用预推钩作为验证器;如果您希望在需要时自动添加git push提交后调用pip-dump的脚本,请使用其他名称(例如dump-and-push)将其写为脚本。