【问题标题】:git - automatic staging branchesgit - 自动登台分支
【发布时间】:2015-10-29 10:21:48
【问题描述】:

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

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

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

  1. 无缝:用户不会知道这种情况正在发生,只要他们知道他们将更改直接推送到目标分支并且不会收到错误代码或令人困惑的消息。
  2. 无害:不以任何方式修改目标分支。
  3. 魔术:静默创建或更新与目标分支关联的暂存分支。
  4. 不可见:应该是服务器端的钩子(例如更新或预接收),这样用户就不需要维护自己的钩子了。

我以前asked this question,但结果并不是我想要的。因此,我创建了一个新问题并进行了更多说明。

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

编辑:

我自己正在寻找一个解决方案,并发现了一些关于三角工作流的东西,这似乎正是我想要的。但我不知道如何自动同步它们,似乎每个好的解决方案都需要一些手动输入。虽然我确信我之前已经看到此设置工作并且不需要在客户端运行任何准备脚本,并且暂存过程是自动的。

【问题讨论】:

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


    【解决方案1】:

    你不能。就服务器上的接收过程而言,您要么接受推送,要么拒绝推送。

    此外,如果您以“接受”响应推送,则执行推送的用户的 git 存储库会在推送完成的假设下更新其远程跟踪分支。也就是说,如果我在主机 edithost 上并且我的 originserverhost,我运行:

    edithost$ git push origin branch
    

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

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

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

    【讨论】:

    • 有没有办法设置这种非对称方法,这样用户就不需要在他们的系统上配置或更改任何东西? (IE:服务器端,或包含在 repo 本身中,并将通过克隆等传播。)您能否链接/扩展一些有关它的更多信息? (这对我来说是新的,不知道在哪里看)
    • 我认为如果不让用户做一些事情来设置他们的配置是不可能做到的。但是,您可以在存储库中有一个脚本,人们可以运行该脚本来进行设置,从而隐藏详细信息。它可以像 shell one liner 一样简单,类似于(完全未经测试,需要明显调整):git config remote.origin.pushurl $(git config --get remote.origin.url | sed s/pullserver/pushserver/)。然后设置只是“克隆这个存储库,然后 cd 进入它并运行这个脚本”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-08
    • 2020-08-23
    • 2017-12-15
    • 2016-09-18
    • 2016-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多