git项目管理与更多分支机构(50)

git项目管理与更多分支机构(50),git,project,Git,Project,我们公司有一个项目,我们制作了一个系统,然后卖给其他公司,我们遇到了一个问题,就是项目管理的问题,每个客户都应该有自己独特的系统,我们的系统也在开发中,如何管理这些项目的开发 我们曾经尝试过使用git分支功能,一个客户就是我们掌握自己的分支开发项目,为客户在分支上面定制 每个主更新,首先在分支重基中使用 但是过了几天,由于主人频繁更换,我们遇到了很多冲突。当时我们花了很多时间解决冲突。时间成本太高了 我们该怎么办?这是一个很难解决的问题。以下是一些想法: 您的编码风格越干净,就越容易在maste

我们公司有一个项目,我们制作了一个系统,然后卖给其他公司,我们遇到了一个问题,就是项目管理的问题,每个客户都应该有自己独特的系统,我们的系统也在开发中,如何管理这些项目的开发

我们曾经尝试过使用git分支功能,一个客户就是我们掌握自己的分支开发项目,为客户在分支上面定制

每个主更新,首先在分支重基中使用

但是过了几天,由于主人频繁更换,我们遇到了很多冲突。当时我们花了很多时间解决冲突。时间成本太高了


我们该怎么办?这是一个很难解决的问题。以下是一些想法:

  • 您的编码风格越干净,就越容易在master之上重新设置客户端的基础。像Bob Martin的“Clean Code”这样的书有很多关于如何编写简单、干净、可重用代码的信息。所有这些的要点之一是干净的代码很容易更改。这不会消除修复冲突的需要,但可能会使它们更容易修复。Michael Feathers的《有效地处理遗留代码》或Fowler、Beck等人的《重构:改进现有代码的设计》一书可能会帮助您找出如何清理master以更好地处理分支,但我不能保证这一点

  • 良好的抽象将有所帮助。如果你有10个客户需要的东西,不要把它放在10个客户分支机构。尝试将它(干净地,不破坏其他东西)移动到master,然后在分支中简单地使用新代码。其他分支机构/客户应该能够安全地忽略它

  • 尝试将客户细节从代码转移到数据。如果代码中有任何特定于客户的设置,请将它们移到text/JSON/YAML文件中。每个客户分支机构都有自己版本的这些文件,而主分支机构没有。现在,您可以处理使用这些设置的代码部分,并随着需求的增长而增长,然后所有客户都将拥有这些代码,但这些设置将帮助决定每个分支中实际发生的情况。这样没有冲突

  • 将特定于客户的功能移动到插件或助手脚本中。这就像上面的#3。如果文件不在那里,您就不能与master发生冲突。如果客户需要自定义格式化程序,请在其分支上放置formatter.foo,然后在该分支的主代码中调用该格式化程序。如果主程序中出现冲突,至少它们只在一个导入行上,或者在调用该导入文件中的函数的行上


  • 另外,我不会使用rebase来实现这一点。我会继续把大师的作品整合到其他的分支中。瑞贝斯有点违反合同。它说“这个分支是从这里开始的。”这不是真的,而且你越频繁地重新设置长寿分支的基础,它就越不真实。Git很好地完成了每次提交中的所有更改,因此代码仍然可以工作,但是代码注释可能会开始不同步,因为它们会继续在可能重构的部分上移动。该评论可能会说“foo中的固定问题”,但30年前“foo”被重命名为“bar”,现在阅读该消息的人不会在代码中看到foo,因为重定基址将清除所有的“foo”。合并使基础保持在原来的位置,并让您正确地了解事物最初创建时的历史位置。而且,分支的时间越长,重新将所有提交重新定基到顶部所需的时间就越长。合并只会带来新功能。

    谢谢,我建议您阅读几本关于编程的书中的一小部分,这确实对我有很大帮助。你说不使用rebase,经过仔细考虑后,你说有道理,我会用你说的方式