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

3
我正在处理一个非常有趣的项目,试图完成以下任务:
每当开发人员将提交推送到远程分支时,执行一个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

如果任何部分出现问题,我会拒绝此次更新(希望能提供一些有用的信息给开发者,以便他/她进行修复)。我已经尝试了这个解决方案,虽然在我的脚本中它似乎可以正常工作,但在真实的远程运行时失败了(我还不知道为什么,但在输入这篇文章时,出现了一个可能有帮助的答案-getting "fatal: not a git repository: '.'" when using post-update hook to execute 'git pull' on another repo)。
我很想听听这里的git专家们的见解,我对支撑整个系统的底层结构还比较陌生,所以如果我走上了正确(或错误)的轨道,或者有一些神奇的命令或需要注意的地方,我会非常感激。
提前感谢!
1个回答

0

update钩子是服务器端的钩子,这意味着它不适用于工作树,因为通常你会推送到一个裸仓库

您的情况更适合使用CI工具,例如Jenkins(或其他任何, TeamCity, Travis-CI, CICircle等)。

你可以设置 Jenkins 任务来检测分支上的任何新提交,就像这个答案中描述的那样。
一个 Jenkins 任务(使用JENKINS Git 插件)将克隆仓库并创建一个工作树,然后可以执行您想要的任何操作(并编写脚本),包括合并。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接