5

虽然我用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是我的脑桥,不知何故,我已经多次搞砸了我的树。

所以我的问题是:

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

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

4

2 回答 2

7

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

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

过滤器驱动程序

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

于 2011-04-24T10:15:10.620 回答
0

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

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

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

于 2011-04-24T10:18:40.547 回答