推荐的git工作流程,用于测试和生产实例

5
虽然我已经使用Git有一段时间了,但我仍然认为自己是个新手,请不要对我太苛刻。
我正在维护一个“企业”主机系统,它有两个非相同的副本。我们称它们为Test和Production。该主机没有我(或者可能是你们中的任何人)认为的版本控制系统,因此我在桌面上使用Git来提供版本控制。以下是我当前工作流程的主要特点:
- 桌面和主机通过FTP“同步”。最终,所有开发工作,无论是在主机上编写还是在PC上编写,都会在Git分支中以PC的形式结束。 - 我没有任何现代部署技术的访问权限,例如Hudson。 - 我有两个主要的分支,称为Test和Prod。由于产品的(继承的)结构,测试和生产实例之间的代码存在一些差异。例如,所有显示面板都需要清楚地标识出这是Test还是Prod,但没有办法在单个点上配置此信息。 - 我通常为特定的开发子项目创建其他分支。 - 一般开发是在Test分支上完成的,具有多个提交。准备好后,这些提交会被挑选到Prod上,并在获得批准后上传并打上更改编号的标签。 - 紧急工作(幸运的是很少)在Prod分支上完成,并被挑选到Test上。 - 这种挑选有时需要手动合并。
我应该改进这个工作流程。目前我的存储库中充满了两个分支上相同的并行更改。
我认为我更喜欢这样做(对于Test -> Prod):
- 一旦开发准备好,就在Prod的HEAD处创建一个新分支。 - 将这组开发更改折叠成新分支上的单个更改。 - 将此新分支合并到Prod上。请记住,它们的共同祖先在使Test与Prod不同的更改之前。
看起来`git rebase -i`可能会完成这项工作,但我必须承认`git rebase`是我的难点,而且我已经多次搞砸了我的树。
因此,我的问题是:
1.请在产品的约束条件下提出更好的方法。
2.如果我的首选方法可行,请有人建议`git rebase -i`的正确参数?
2个回答

7
关于测试环境和生产环境的区别,请检查您是否可以检测到您在哪个环境中。
这将允许使用过滤器驱动程序通过一个修饰脚本在检出时修改具有特定平台内容的文件。

filter driver

那样的话,你就不需要维护分支来区分几乎相同的代码集了。

这是一个非常有趣的想法,我之前没有考虑过也不知道。在占用更多您的时间之前,我会先去阅读一下相关资料。谢谢。 - Brent.Longborough

0

我的建议是将你的开发(测试)和生产分支互相合并的频率增加,而不是选择性地跨越变化。特别是当在生产环境中进行更改时,每天至少要将它们与测试环境合并一次。当测试环境准备好需要更改时,将其合并到生产环境。

你从测试环境中选择性地将提交内容添加到生产环境也表明,你的提交内容没有很好地拆分,而是包含了非常大的差异的几个提交。这使得很难使用你的历史记录来调试问题,并且几乎不可能撤消单个更改(通过撤消单个提交来实现)。

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


我不确定如何在不丢失测试<->生产差异的情况下进行合并。您能否澄清一下?我只能在部署前不久安全地合并到生产环境,并且我不决定什么时候完成这个过程,尽管我可以有一个预部署分支。我认为我的提交比你建议的要频繁得多;这就是为什么我想避免每次部署都要进行大量 cherry-picks 的原因。目前我的历史记录太多了:开发细节被单独复制到 Prod 分支中,而不是成为一个用于部署的单一变更集。 - Brent.Longborough
重点是要减少测试和生产环境之间的差异。我不明白你最后一句话的意思;你的意思是说你一直在将测试环境中的合并提交压缩到生产环境中吗? - raylu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接