如何在Git中管理多个版本的代码?
故事是这样的, 我有一个大型的软件源代码,web前端,它实际上有数百个客户,达到近千个客户,我的计划是,每个客户都将直接链接到这个git repo中的一个特定分支(对于源代码),没有客户会在我们的git repo中共享相同的分支名称 现在,我在一些客户机甚至所有客户机上部署特性的方式面临挑战 假设当前所有分支(所有客户端)都从相同的提交历史开始,即: 分支上的git日志:如何在Git中管理多个版本的代码?,git,github,Git,Github,故事是这样的, 我有一个大型的软件源代码,web前端,它实际上有数百个客户,达到近千个客户,我的计划是,每个客户都将直接链接到这个git repo中的一个特定分支(对于源代码),没有客户会在我们的git repo中共享相同的分支名称 现在,我在一些客户机甚至所有客户机上部署特性的方式面临挑战 假设当前所有分支(所有客户端)都从相同的提交历史开始,即: 分支上的git日志:master,client1,…,client900: 承诺10 委员会9 委员会1 然后,从分支master我为fea
master
,client1
,…,client900
:
- 承诺10
- 委员会9
- 委员会1
master
我为feature\u a
创建了一个开发分支,然后我为该功能开发了所有必要的代码
我的计划只是将feature\u a
部署到100个客户端,即将所有提交从feature\u a
合并到client1
到client100
它完美无缺
然后,从分支master
再次为feature\u b
创建了一个开发分支,然后为该功能开发所有必要的代码
现在,我的计划是将feature\u b
部署到所有客户端,即将所有提交从feature\u b
合并到client1
到client900
我们的目标是让client1
到client100
拥有2个功能,而其余的只有1个附加功能
由于开发feature\u a
和feature\u b
需要更改许多相同的文件,这将导致分支client1
到client100
的合并冲突
修复成百上千的合并冲突对我来说不是一个选择,有没有更好的方法来解决这个问题?或者有没有更好的git repo体系结构设计或方法,以便将功能部署到某些客户机,然后部署到所有客户机时能够无缝解决问题?我不同意这种构建代码的方式,我也同意评论员的说法,即您应该使用功能标志。如果你关心代码甚至是客户机,那么你应该把特征标志看作是构建过程的一部分,这样给定的工件只有你想要的特性。
也就是说,对于“少量”功能,您可以通过使用标记来改善您的情况 给每个客户机一个唯一的标记,而不是每个客户机都有一个唯一的分支。大多数git操作都会执行相同的操作,但是更改它们指向的代码要容易得多 那么你的分支应该是基于特征的。因此,您将拥有只包含功能a代码的
功能a
。然后您就有了功能b的
,其中代码仅用于功能b。然后您就有了同时包含功能a和b的功能a和b
,您只需在一个点上解决冲突
对于部署,您只需将标记更改为指向所需的分支-client1
到client100
指向feature\u\b
和client101
到client900
指向feature\u\b
然后假设client562决定升级(或其他),现在他们需要功能a。超级简单-只需将标签client562
更改为指向feature\u a\u b
。不需要合并
但是如果有特定于客户端的更改怎么办? 在功能分支之外创建一个客户端分支,并在那里进行更改 但是如果存在特定于客户端的更改,并且这些更改改变了功能,该怎么办? 对于客户机分支,只需将特定于客户机的提交重新设置到相应的功能分支上
引入的功能越多,这就越复杂,特别是您需要
2^(n-1)
功能分支,其中n
=功能的数量。在实践中,如果某些特征必须存在才能使其他特征发挥作用(即特征j只有在特征c存在时才有意义),则该值可能较低,但这是一个合理的近似值
然而,这是一个非常复杂的方法来做这件事,我不愿意在这种环境下实际工作。我仍然认为这是对管理1000个分支的一种改进,但是我希望你会考虑一种不同的方式来管理你的部署。 < P>我不同意这种构造你的代码的方式,我同意评论家说你应该使用特征标志。如果你关心代码甚至是客户机,那么你应该把特征标志看作是构建过程的一部分,这样给定的工件只有你想要的特性。
也就是说,对于“少量”功能,您可以通过使用标记来改善您的情况 给每个客户机一个唯一的标记,而不是每个客户机都有一个唯一的分支。大多数git操作都会执行相同的操作,但是更改它们指向的代码要容易得多 那么你的分支应该是基于特征的。因此,您将拥有只包含功能a代码的
功能a
。然后您就有了功能b的
,其中代码仅用于功能b。然后您就有了同时包含功能a和b的功能a和b
,您只需在一个点上解决冲突
对于部署,您只需将标记更改为指向所需的分支-client1
到client100
指向feature\u\b
和client101
到client900
指向feature\u\b
然后假设client562决定升级(或其他),现在他们需要功能a。超级简单-只需将标签client562
更改为指向feature\u a\u b
。不需要合并
但是如果有特定于客户端的更改怎么办? 在功能分支之外创建一个客户端分支,并在那里进行更改