【问题标题】:Git: how to merge a commit into a branch via an update githookGit:如何通过更新 gitook 将提交合并到分支中
【发布时间】:2015-12-28 15:13:31
【问题描述】:

我正在做一个相当有趣的项目,尝试做以下事情:

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

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

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

是否有一种(相对)简单的方法可以通过 update gitook 将一个分支(或提交)合并到另一个分支?我的理由是远程虽然不是工作树,但显然拥有执行此操作所需的所有数据,只是没有命令(据我所知)。

如果没有直接的命令,我的下一个想法是创建一个远程的临时克隆,我可以在其中执行合并操作:

(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 大师那里得到任何见解,我对支撑整个系统的管道还是相当陌生,所以如果我在正确(或错误)的轨道上,或者如果有一些我应该知道的神奇命令或陷阱,我将不胜感激。

提前致谢!

【问题讨论】:

    标签: git githooks


    【解决方案1】:

    update 钩子是一个server-side one,这意味着它打算在工作树中工作,因为您通常是push to a bare repository

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-17
      • 1970-01-01
      相关资源
      最近更新 更多