Git、SVN等是否执行这种类型的;分支及;“合并”;还是像这样?

Git、SVN等是否执行这种类型的;分支及;“合并”;还是像这样?,svn,git,version-control,build,Svn,Git,Version Control,Build,客户机有相同代码的不同版本,基本上他们复制一个模板代码库,然后编辑副本,然后在生产中使用该副本作为代码实例。这意味着有20个版本的代码库正在运行,但80%的代码是相同的。如果每个版本/分支的VCS中的代码发生更改,则可以在不更改工作流的情况下合并源代码,然后进行代码的版本生成。如果这很重要的话,代码是用Perl编写的 如果是的话,这叫什么,VCS是否管理“构建”(它是Perl,实际上只是代码的版本) 可视化:A、B、C自定义代码分支;X是共享代码 | | X | /|

客户机有相同代码的不同版本,基本上他们复制一个模板代码库,然后编辑副本,然后在生产中使用该副本作为代码实例。这意味着有20个版本的代码库正在运行,但80%的代码是相同的。如果每个版本/分支的VCS中的代码发生更改,则可以在不更改工作流的情况下合并源代码,然后进行代码的版本生成。如果这很重要的话,代码是用Perl编写的

如果是的话,这叫什么,VCS是否管理“构建”(它是Perl,实际上只是代码的版本)

可视化:A、B、C自定义代码分支;X是共享代码

   |
   |
   X
   |
  /|\
 / | \
A  B  C
 \ | /
  \|/
   |
   |
   X
   |
   |
   |\
   | \
 A,B  C
   | /
   |/
   |
   |
   X
   |
   |      
  /|
 / |
A  B,C
 \ |
  \|
   |
   |
  Etc... Where X = 80% of the code.
   |
   |      

我想这可以通过分支实现,但我认为更理想的做法是拥有一个更智能的模板系统,它知道如何加载正确版本的模板。如果您坚持使用分支,您可以通过拥有一个包含所有公共代码的主分支(用Git的说法)和一个针对每个变体的分支来实现。对特定版本的更改可以在相关分支上完成,而应该影响所有内容的更改可以在主分支上完成。但是,除非为每个分支编写某种自动化程序,否则必须将最新的主控更改单独合并到每个分支中。再说一次,我不认为使用分支来实现这样的功能是最好的主意,但是你可以让它工作。

我想这可以通过分支来实现,但我认为更理想的是拥有一个更智能的模板系统,知道如何加载正确版本的模板。如果您坚持使用分支,您可以通过拥有一个包含所有公共代码的主分支(用Git的说法)和一个针对每个变体的分支来实现。对特定版本的更改可以在相关分支上完成,而应该影响所有内容的更改可以在主分支上完成。但是,除非为每个分支编写某种自动化程序,否则必须将最新的主控更改单独合并到每个分支中。再说一次,我不认为使用分支来实现类似的功能是最好的主意,但您可能能够让它工作。

是的,您可以,但在我解释之前,我必须强烈建议您不要这样做。最好将可变内容与共享内容分开,并将共享内容转换为某种框架,这可能很简单,只需将可变内容移动到一个“站点”目录(我猜您正在构建固定网站),该目录包含20个子目录,框架在运行时从中选择(添加到模块路径)(
使用lib“sites/$site”;
可能会奏效,但不要引用我的话)


如果你真的必须通过版本控制来管理它,你可以简单地为每个站点创建一个分支,维护基于master的核心代码,并定期从master合并到每个站点,以便传播更新。如果变量和共享代码完全分开,这将很少需要人工干预。

可以,但是在我解释之前,我必须强烈建议您不要这样做。最好将可变内容与共享内容分开,并将共享内容转换为某种框架,这可能很简单,只需将可变内容移动到“站点”目录中(我猜您正在构建固定网站)框架在运行时从20个子目录中选择(添加到模块路径中)(
使用lib“sites/$site”;
可能会做到这一点,但不要引用我的话)


如果你真的必须通过版本控制来管理它,你可以简单地为每个站点创建一个分支,维护基于master的核心代码,并定期从master合并到每个站点,以便传播更新。如果变量和共享代码完全分开,这将很少需要人工干预。

在Git中,你可以拥有一个Git存储库的多个完整克隆,每个克隆都是它自己的完整repo

  • 创建一个名为client/custom的新分支
  • 进行客户端更改并将其提交给客户端/自定义
  • 在“原始”回购协议中进行更改
  • 提交原始repo中的更改
  • 将更改从源/主机拉入客户机/主机
  • 将客户机/自定义重设为最新的客户机/主机,或将客户机/主机的最新更改合并到客户机/自定义中
这可能不是在Git中实现这一点的最快方法,但它可以工作(当然,假设您手动解决任何不可靠的合并)


请参见Git中的

,您可以拥有一个Git存储库的多个完整克隆,其中每个克隆都是它自己的完整repo

  • 创建一个名为client/custom的新分支
  • 进行客户端更改并将其提交给客户端/自定义
  • 在“原始”回购协议中进行更改
  • 提交原始repo中的更改
  • 将更改从源/主机拉入客户机/主机
  • 将客户机/自定义重设为最新的客户机/主机,或将客户机/主机的最新更改合并到客户机/自定义中
这可能不是在Git中实现这一点的最快方法,但它可以工作(当然,假设您手动解决任何不可靠的合并)


请参见

我认为这叫做分支和合并?@Lukman:+1谢谢,更新了问题。我认为这叫做分支和合并?@Lukman:+1谢谢,更新了问题。+1谢谢,RE:“我认为拥有一个更智能的模板系统,知道如何加载正确版本的模板会更理想。”这方面的例子是什么?“我不认为用分支来做这样的事情是最好的主意”同意,只是确定一下。@错误-马塞洛给出了几乎相同的答案,对“更聪明”的东西有了更具体的描述可能是。您只需要一种方法来将公共代码与特定于实例的代码分离。无论是哪个脚本提供这些内容,都需要检查哪个实例