Git:如何通过更新githook将提交合并到分支中

时间:2015-09-30 17:59:44

标签: git githooks

我正在开展一个相当有趣的项目,尝试执行以下操作:

  

每当开发人员将提交推送到远程分支时,执行一个githook,它将通过问题跟踪系统查找其关联的QA分支,然后将该提交合并到QA分支中。

     

如果QA分支上存在任何冲突,则拒绝提交远程分支(镜像开发人员的本地分支)是非常重要的。

我遇到的问题是必须在工作树中运行git-merge(以及pull,checkout等),这会导致githook失败。

是否有(相对)简单的方法通过update githook将一个分支(或提交)合并到另一个分支(或提交)?我的理由是,遥控器虽然不是一棵工作树,但显然拥有它所需的所有数据,而不是命令(就我能够找到的那样)。

如果没有简单的命令,我的下一个想法是创建一个临时克隆的遥控器,我可以在其中执行合并操作:

(psuedocode)
mkdir $GIT_DIR/tempRepo
cd $GIT_DIR/tempRepo
git clone -b $QA_BRANCH --local $PARENT_DIR $CURRENT_DIR
git merge $WHATEVER
#cleanup

如果其中的任何部分失败,我拒绝update(希望向开发人员提供一些有用的信息,以便他/她可以修复它)。我已经使用了这个解决方案,虽然它看起来通过我的脚本工作正常,但它在真正的遥控器上运行时失败了(我不知道为什么,但是在打字时,这个答案突然出现了这可能会有所帮助 - getting "fatal: not a git repository: '.'" when using post-update hook to execute 'git pull' on another repo

我喜欢这里的git guru的任何见解,我对整个系统支撑的管道仍然相当新,所以如果我在正确(或错误)的轨道上,或者如果有一些我应该知道的神奇命令或陷阱,我会很感激。

提前致谢!

1 个答案:

答案 0 :(得分:0)

update挂钩是server-side one,这意味着 意图在工作树中工作,因为您通常push to a bare repository

您的方案更适合CI工具,例如Jenkins(或any othersTeamCityTravis-CICICircle等。 ..)

您可以设置Jenkins作业以检测分支上的任何新提交,如in this answer所述 Jenkins作业(使用JENKINS Git Plugin)将克隆repo并创建一个工作树,然后可以执行任何您想要的操作(并编写脚本),包括合并。