git - 自动分段分支

时间:2015-10-29 10:21:48

标签: git version-control continuous-integration githooks staging

我想创建一个自动登台分支创建过程。当用户将他的更改推送到git服务器时,它应该检查目标分支 - 如果分支是生产分支,它应该而不是推送到临时分支。 (稍后,将开始持续集成过程,该过程将负责将更改推送/合并回生产分支。)

我尝试过使用git-hooks,但我觉得我错过了一些东西。没有任何git-hooks让我实际修改或操作底层git进程并更改目标分支,所以我尝试使用git-hooks推送到生产分支然后停止其余的进程 - 但这会导致用户获取失败消息,这是不需要的。

所以我需要一个解决方案:

  1. 无缝:用户不会知道这种情况正在发生,只要他们知道他们正在将他们的更改直接推送到他们的目标分支中,他们就不会收到任何错误代码或令人困惑的消息。
  2. 无害:不以任何方式修改目标分支。
  3. Magic:静默创建或更新与目标分支关联的分段分支。
  4. 不可见:应该是服务器端挂钩(例如更新或预接收),以便用户不需要维护自己的挂钩。
  5. 我之前asked this question,但结果并不完全是我想要的。所以我创建了一个更加清晰的新问题。

    我期待着为我提供答案“啊哈!”实现我所缺少的东西。我之前已经看过这个过程,我知道这是可能的,我只是遗漏了一些东西。我真正想知道的是,是否可以使用钩子修改底层git进程,或者“劫持”钩子返回代码,以便它向用户显示即使我停止并更改了进程,一切也顺利。或者也许是另一种解决方案。

    修改

    我自己正在寻找一个解决方案,并找到了一些关于Triangular Workflows的东西,看起来它可能正是我想要的。但我无法弄清楚如何自动同步它们,似乎每个好的解决方案都需要一些手动输入。虽然我确信我已经看到这个设置工作之前和之后都没有在客户端运行任何准备脚本,并且暂存过程是自动化的。

1 个答案:

答案 0 :(得分:0)

你做不到。就服务器上的接收过程而言,您可以接受推送,也可以拒绝它。

此外,如果您对推送进行“接受”响应,那么正在执行推送的用户的git存储库会在假设推送完成的情况下更新其远程跟踪分支。也就是说,如果我在主持人edithost上,而我的originserverhost,我就会运行:

edithost$ git push origin branch

似乎成功了,我的git会告诉我origin/branch现在指向与我的本地branch相同的提交。

(如果我运行git fetch origin我的本地git会在这种情况下发现,事实上,origin/branch 更新。这与我将会做同样的事情看看你是否真的完全接受了更新,但是一些管理员很快就潜入并重置或强制推送,以便我的提交再次被删除。从根本上说它没有害处:只要所有用户期待< / em>这种行为,他们可以容纳它。但它也不是无缝的:这是一个接缝。)

使所有这些不足为奇的唯一方法是让您的用户推送到集成分支,或者推送到中间服务器(或服务器内的位置),其中命名为生产分支的东西实际上是集成分支机构。当然,这也不是无缝的,但这并不令人惊讶。 :-)它也很容易安排,因为git是“开箱即用”的,能够进行非对称的提取和推送(参见,例如,remote.name.pushurl)。