使用git在几个客户项目中使用小型随机更新对版本控制Web项目提出了更好的建议吗?
我想将git用于Web项目的版本控制。与几乎所有其他提案的主要区别在于,这是一个使用HTML,JavaScript和一些PHP文件的Web项目 - 没有中央库被一个或多个程序使用,就像典型的Linux软件包中一样。
我所有不同的网络项目都是针对不同的客户,基于相同的平台文件,我估计80%的文件是相同的(称为平台),20%是针对不同的客户进行修改以满足他们的需求。这里的问题是,我不知道我们需要客户更新哪些文件 - 详细地说每个客户都不同。
最好将平台特定文件保存在一个目录中,并将这些文件与客户特定文件重叠在另一个目录中。为了用git解决这个问题,到目前为止我没有找到任何好处:
这里最好的方法是什么?
答案 0 :(得分:4)
这实际上是一个架构设计问题,而不是源代码管理问题。然而,这是一个常见的有趣的问题,所以我提供了一些关于如何解决架构问题的一般性建议。
问题不在于Git。问题在于,您没有充分区分保持不变的内容与客户之间的变化。一旦确定了正确的设计模式,适当的源控制模型就会变得更加明显。
考虑一下Russ Olsen的这句话:
[分开]可能会从可能保持不变的事物中改变的事物。如果您可以确定系统设计的哪些方面可能会发生变化,则可以将这些位与更稳定的部分隔离开来。
奥尔森,拉斯(2007-12-10)。 Ruby中的设计模式(Kindle Locations 586-588)。培生教育(美国)。 Kindle版。
我不太了解您的应用程序以提供具体建议,但一般 Web项目可以从几种不同的设计模式中受益。模板,复合或原型模式可能都适用,但有时讨论模式会使问题更容易混淆。
没有特别的顺序,这就是我个人所做的事情:
一旦您重构了应用程序以最大限度地减少客户之间的更改,您可能会发现除非您试图隐藏每个客户端的多态代码,否则根本不需要保持代码分离。如果是这种情况,您当然可以在那时调查子模块或单独的分支,但没有分支之间重复的负担。
最后,如果您发现可以将更改隔离到几个子目录中,Git支持符号链接。您可以在开发分支的每个客户端子目录中简单地拥有所有不同的代码,并将文件符号链接到每个客户端版本分支上的正确位置。您甚至可以使用一些shell脚本或在自动部署期间自动执行此操作。
这将您的所有开发代码保存在一个位置,以便于比较和重构(例如开发分支),但确保真正 的代码需要针对每个版本进行不同需要当你把它投入生产时。
答案 1 :(得分:2)
由于您为每个供应商定制解决方案的性质,供应商分支最有意义。最好的方法是放弃这个并开发multi-tenant application。