合并后git挂钩

时间:2011-03-27 02:03:12

标签: git heroku

无论如何判断合并是否与拉动有关?

我想使用git-flow的合并作为钩子将我的数据发送到heroku。想法?

1 个答案:

答案 0 :(得分:1)

就个人而言,我不喜欢这样的安排:你在本地尝试的每次合并到主人或开发都会导致部署,而我更倾向于将代码部署为一个积极的决定 - 没有空间尝试合并部署它。 (另外,我并不完全了解Heroku的行为,但如果在将提交推送到不会改变该引用的引用时重新部署,我会感到惊讶。)最后,通常由pull完成的合并将不会是一个快进的,所以成为要部署的代码的新版本。

但是,如果您真的想这样做,可以在脚本中执行以下操作:

UPSTREAM=$(git rev-parse --symbolic-full-name @{u})

这将为您提供代表当前分支上游的远程跟踪分支 - 在合并后的挂钩中,您当前的分支是您刚刚合并到的分支。 (这个很好的命令取自Kevin Ballard对this answer的评论。)你可以找到该提交的对象名称(SHA1sum):

UPSTREAM_OBJECT_NAME=$(git rev-parse --verify $UPSTREAM)

然后你想知道这个提交是否是HEAD的父母之一 - 你可以通过以下方式获得父母:

HEAD_PARENTS=$(git log -n 1 --pretty=format:"%P")

...所以可以测试上游是否是父母之一:

git log -n 1 --pretty=format:"%P" | grep -q $UPSTREAM_OBJECT_NAME

最后,您应该检查远程跟踪分支的reflog的第一行,以检查它是否是上次通过pull更新的。换句话说,行:

git reflog show -n 1 $UPSTREAM

...包含pull : fast-forward

这应该为您提供所需类型的post-merge脚本所需的部分。但重申一下,我真的不想要这个;)