有没有更好的提案来使用git版本控制带有小型随机更新的多个客户项目的Web项目?
我想使用git来进行Web项目的版本控制。与几乎所有其他建议的主要区别在于,这是一个使用HTML、JavaScript和一些PHP文件的Web项目-没有像典型Linux软件包中那样由一个或多个程序使用的中央库。
我所有不同的Web项目都是为不同的客户基于相同的平台文件,我估计80%的文件是相同的(称之为平台),20%被修改以适应不同客户的需求。问题在于,我不知道哪些文件需要进行客户更新-具体而言,每个客户都不同。
最好将特定于平台的文件保存在一个目录中,并在另一个目录中使用客户特定的文件覆盖这些文件。要使用git解决这个问题,到目前为止我还没有找到真正好的方法:
- git子模块 (如此处所建议的) 通常设计用于使供应商开发的库的源文件接近链接它的程序。因此问题在于平台文件和客户文件位于不同的目录中,因此我必须在部署期间混合它们以创建Web服务器的文件。此外,我还必须手动同步目录树,对于10级目录结构来说,这将是非常繁琐的工作。总的来说,很多帖子都抱怨使用子模块需要大量管理工作,看起来有些过度了。
- git子树 (如此处所建议的) 似乎比子模块简单,但存在与不同目录相同的问题,因此在部署期间我还需要保持目录结构同步并混合文件。此外,难以从客户端回推平台更改。
- GitSlave (如此处所建议的) 我不确定这对我是否有好处。它允许保持多个git仓库同步,也许有助于同步平台的目录结构,但我无法相信它。
- 在不同目录中重构平台和客户文件(如此讨论的结果) 我认为在我的客户和Web项目所使用的技术情况下,这是不可能的。对于一个客户,需要更新这个页面,另一个客户需要更新那个页面。即使引入了PHP框架,客户特定的更改也会分散在整个树中。
- 检出(如同此讨论中最后一篇帖子所提出的) 这看起来非常简单和有前途,但缺点是所有特定于客户的文件都不在git之内(因此不在版本控制之内)。此外,在平台和客户端更新文件的情况下,git pull会失败并终止,因此不可用。
- 供应商分支(如此处推荐的) 据我所知,分支是用来合并回来的,这不是针对我的特定客户补丁的。这些分支将始终保持打开状态,仅在平台(主)向客户端更新后合并。这将导致一个包含所有客户和平台信息的巨型repo - 这不是git处理repo的方式。
- 混合部署。因此,一种非常实用的方法是将平台文件保存在一个repo中,将客户文件保存在专用repo中。在部署文件到Web服务器时,可以首先写入所有平台文件,然后用平台特定文件覆盖其中一些。混合发生得很晚,在Web服务器目录中。这也有一个缺点,即每个客户的目录结构必须手动与平台结构保持同步 - 否则部署将过于复杂。
这里最好的方法是什么?