我们尝试过使用git branch功能,客户是我们掌握自己开发项目的分支机构,为客户提供以上定制的分支机构。
每个主更新,首先在分支rebase中使用。
但是过了几天,由于主人频繁更换,我们遇到了很多冲突。我们当时花了很多时间来解决冲突。时间成本太高了。我们该怎么做?
答案 0 :(得分:1)
这是一个难以解决的问题。以下是一些想法:
您的编码风格越干净,就越容易在主人之上重新定位客户。书籍,如Bob Martin的“清洁代码”,有很多关于如何编写简单,干净,可重用代码的信息。所有这一切的要点之一是干净的代码很容易改变。这不会消除修复冲突的必要性,但可能会使它们更容易修复。像Michael Feathers这样的“有效地使用传统代码”这本书,或者Fowler,Beck等人的“重构:改进现有设计”这本书可能会帮助你弄清楚如何让主人清理工作以更好地与分支机构合作,但我不能保证。
好的抽象会有所帮助。如果您有10个客户需要的东西,请不要将其放在10个客户分支中。尝试移动它 - 干净利落,不破坏其他东西 - 掌握,然后只需在分支中使用新代码。其他分支机构/客户应该能够安全地忽略它。
尝试将客户细节从代码移动到数据。如果代码中有任何客户特定的设置,请将它们移出到text / JSON / YAML文件。每个客户分支都有自己的这些文件版本,主分支将没有任何版本。现在,您可以处理使用这些设置的代码部分,并随着需求的增长而增长,然后所有客户都将拥有该代码,但这些设置将有助于确定每个分支中实际发生的情况。没有这种冲突。
将客户特定功能移至插件或帮助程序脚本中。这就像上面的#3。如果文件不存在,则无法与master发生冲突。如果客户需要自定义格式化程序,请将formatter.foo放在其分支上,然后在该分支的主代码中调用该格式化程序。如果你在主程序中遇到冲突,至少它们只是在一个导入行上,或者在调用该导入文件中的函数的行上。
另外,我不会为此使用rebase。我会继续将master重新整合到其他分支中。 Rebase打破了合约。它说“这个分支从这里开始。”这不是真的,而且你越是经常使用长寿分支就越少。 Git在每个提交中都做了很多改变,所以代码仍然有效,但是代码注释可能会开始变得不同步,因为它们会继续在可能重构的部分之上移动。评论可能会说“修复了foo中的问题”,但30个提交前'foo'被重命名为'bar',现在有人在阅读该消息时不会在代码中看到foo,因为rebasing将擦除所有'foo'远。合并会留下它们所在的基础,并让您正确地了解事物最初制作时的历史。此外,分支获得的时间越长,将所有提交再次转换为顶部所需的时间就越长。合并只会带来新的东西。