【问题标题】:Recommended git workflow for test and production instances推荐用于测试和生产实例的 git 工作流
【发布时间】:2011-04-24 09:53:28
【问题描述】:

虽然我用git已经有一段时间了,但我仍然认为自己是n00b,所以请不要对我太苛刻。

我将“公司”大型机系统维护为两个不同的副本。我们称它们为测试和生产。大型机没有任何我(或者可能是你们中的任何人)会认为是版本控制系统的东西,所以我在桌面上使用 git 来为我提供版本控制。以下是我当前工作流程的主要特点:

  • 桌面和大型机与 FTP “同步”。最后,所有的开发工作,无论是写在主机上还是 PC 上,最终都在 PC 上的一个 git 分支中结束。

  • 我无法使用任何类型的“现代”部署技术,例如 Hudson

  • 我有两个主要分支,称为 Test 和 Prod。由于产品的(继承)结构,Test 和 Prod 实例之间的代码存在许多差异。例如,所有的显示面板都需要清楚地识别这是Test还是Prod,但是没有办法在一个点上进行配置。

  • 我通常为特定的开发子项目创建其他临时分支。

  • 一般开发在测试分支上完成,有多个提交。准备就绪后,这些内容会被挑选到 Prod 上,并标有更改编号,并在获得批准后上传。

  • 紧急工作(幸运的是很少见)在 Prod 分支上完成,并被挑选到 Test 上。

  • 偶尔需要手动合并。

我想改进这个工作流程。目前,我的存储库在两个分支上充满了并行相同的更改。

我想我更愿意这样做(用于测试 -> 产品):

  • 一旦开发准备就绪,在产品 HEAD 处创建一个新分支

  • 将这组开发更改合并为新分支上的单个更改

  • 将此新分支合并到 Prod。请记住,它们的共同祖先是使 Test 不同于 Prod 的更改

看来git rebase -i 可以胜任这项工作,但我必须承认git rebase 是我的pons asinorum,不知何故,我已经多次搞砸了我的树。

所以我的问题是:

  1. 请在产品限制范围内提出更好的方法。

  2. 如果我的首选方法可行,有人可以建议git rebase -i 的正确参数吗?

【问题讨论】:

    标签: git deployment workflow git-rebase


    【解决方案1】:

    关于 Test 和 Prod 之间的差异,请检查您是否可以检测到您是否处于一种环境或另一种环境中。

    对于具有特定平台内容的文件,这将允许在结帐时通过涂抹脚本使用filter driver 进行修改。

    这样,您就不必维护分支来分离几乎相同的代码集。

    【讨论】:

    • 这是一个非常有趣的想法,我没有考虑过,也没有意识到。在我花更多时间在这里之前,我要离开并阅读它。谢谢。
    【解决方案2】:

    我的建议是更频繁地将您的开发(测试)和生产(产品)分支合并到彼此中,而不是挑剔更改。特别是在 Prod 中进行更改时,请经常(至少每天一次)将它们合并到 Test 中。当 Test 中的更改准备就绪时,将它们合并到 Prod 中。

    您在批准后从 Test 中挑选提交到 Prod 也表明您的提交没有很好地拆分,而是几个提交,每个提交都有很大的差异。这使得使用您的历史记录来调试问题变得困难,并且几乎不可能恢复单个更改(通过恢复单个提交)。

    我认为通过在您的工作流程中更改这两件事,如何管理开发和生产分支的更大问题将更加明显。

    【讨论】:

    • 我不确定如何在不丢失测试的情况下进行合并产品差异。你能澄清一下吗?我只能在部署前不久安全地合并到 Prod 中,我不决定何时完成,尽管我可以有一个部署前的分支。我认为我的提交比你建议的要频繁得多;这就是为什么我想避免每次部署都选择大量的樱桃。目前我有太多的历史:开发的细节被单独复制到 Prod 分支中,而不是作为一个signle、for-deployment、changeset。
    • 重点是减少Test和Prod之间的差异。我不明白你的最后一句话;你的意思是你一直在压缩从 Test 到 Prod 的合并提交?
    猜你喜欢
    • 2017-08-05
    • 1970-01-01
    • 2014-08-18
    • 1970-01-01
    • 2017-11-12
    • 1970-01-01
    • 1970-01-01
    • 2012-05-01
    • 1970-01-01
    相关资源
    最近更新 更多