git钩子后合并

git钩子后合并,git,heroku,Git,Heroku,是否有任何方法可以判断所进行的合并是否与拉操作关联 我想使用git flow的合并作为一个钩子,将我的数据发送到heroku。想法?就我个人而言,我不喜欢这种安排:您在本地尝试的每一次主控或开发合并都会导致部署,我更愿意将部署代码作为一项积极的决策——如果不部署它,就没有空间尝试合并某些东西。(另外,我不知道Heroku的具体行为,但如果在将提交推送到一个不会更改该引用的引用时重新部署它,我会感到惊讶。)最后,通常通过拉操作完成的合并不会很快完成,因此将有一个新版本的代码要部署 但是,如果确实要

是否有任何方法可以判断所进行的合并是否与拉操作关联


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

就我个人而言,我不喜欢这种安排:您在本地尝试的每一次主控或开发合并都会导致部署,我更愿意将部署代码作为一项积极的决策——如果不部署它,就没有空间尝试合并某些东西。(另外,我不知道Heroku的具体行为,但如果在将提交推送到一个不会更改该引用的引用时重新部署它,我会感到惊讶。)最后,通常通过拉操作完成的合并不会很快完成,因此将有一个新版本的代码要部署

但是,如果确实要执行此操作,可以在脚本中执行以下操作:

UPSTREAM=$(git rev-parse --symbolic-full-name @{u})
这将为您提供表示当前分支上游的远程跟踪分支-在合并后挂钩中,您的当前分支就是您刚刚合并到的分支。(这个漂亮的命令取自Kevin Ballard对的评论。)您可以通过以下方式找到该提交的对象名(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
。。。因此,我们可以测试上游是否是父母之一:

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
。。。包含
拉:快进


这将为您提供所需类型的
post merge
脚本所需的片段。不过,重申一下,我真的不想这样;)

我不明白-为什么你特别需要知道合并是否是拉的结果?当然,对于git flow模型,您只需要关心合并是进入
master
还是其他特定分支?每次我进入master时,我都试图运行一个部署脚本到heroku,但是,我也有一个登台服务器,每次我进入开发时,我都想部署到登台。我们有两个人在合作,我担心每次我们从源代码提取,它会自动合并到开发中,它会再次尝试发布到登台…你是说你担心如果在
开发
分支上运行
git pull origin master
,它会将一个版本部署到登台服务器,该版本的更改来自于
master
merged?否。我担心每次运行“git-pull-origin-master/development”时,我所在的哪个分支都会部署该版本。我只是不希望它在我不需要的时候一无所获。