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