我正在处理一个非常有趣的项目,试图完成以下任务:
每当开发人员将提交推送到远程分支时,执行一个githook,通过问题跟踪系统查找其关联的QA分支,然后将该提交合并到QA分支中。
如果在QA分支上存在任何冲突,则必须拒绝对远程分支(镜像开发人员的本地分支)进行的提交。
我遇到的问题是git-merge(和pull、checkout等)必须在工作树中运行,这会导致githook失败。
是否有一种(相对)简单的方法可以通过“update” githook将一个分支(或提交)合并到另一个分支中?我的理由是,远程虽然不是一个工作树,但显然具有执行此操作所需的所有数据,只是没有命令(就我所能找到的而言)。
如果没有直接的命令,我的下一个想法是创建远程的临时克隆,在其中执行合并操作:
如果任何部分出现问题,我会拒绝此次更新(希望能提供一些有用的信息给开发者,以便他/她进行修复)。我已经尝试了这个解决方案,虽然在我的脚本中它似乎可以正常工作,但在真实的远程运行时失败了(我还不知道为什么,但在输入这篇文章时,出现了一个可能有帮助的答案-getting "fatal: not a git repository: '.'" when using post-update hook to execute 'git pull' on another repo)。
我很想听听这里的git专家们的见解,我对支撑整个系统的底层结构还比较陌生,所以如果我走上了正确(或错误)的轨道,或者有一些神奇的命令或需要注意的地方,我会非常感激。
提前感谢!
每当开发人员将提交推送到远程分支时,执行一个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专家们的见解,我对支撑整个系统的底层结构还比较陌生,所以如果我走上了正确(或错误)的轨道,或者有一些神奇的命令或需要注意的地方,我会非常感激。
提前感谢!