我现在每天都在使用 git,这一次我遇到了一个可以这样描述的问题。
我有一个包含整个网站结构的存储库,并且 Web 根目录位于存储库的根目录中。一切都很好,直到那是单个站点的存储库。但是,同一个 repo 现在用于多个站点 - 基本上是同一个站点,使用不同的语言,小的模板调整,不同的图形等。这些东西自然是版本化的。
有一个 master 分支,它保存该站点的原始源代码,我希望 master(或其他一些分支)保存所有站点通用的代码,因为最终会有太多的更改站点-具体包括在回购的通用部分。
接下来,每个使用此源代码的站点都有一个分支。所有这些分支(例如site1、site2和site3)都是从 master 分支创建的,并且每个站点都克隆正确的分支。
好吧,这似乎是个好主意,直到我开始到处进行更改。
如果我在 site1 分支上进行了更改,并且需要将该更改复制到 site2 分支,我会从一个分支选择提交到另一个分支。在那里合并是不可能的,因为 site1 分支上还有其他不属于 site2 分支的更改。对于这种情况,是否还有其他更优雅的解决方案,或者挑选樱桃正是为了这个目的?
现在,对我来说真正的“问题”是当我更改 master 时,然后我想将所有这些更改复制到所有分支。自然地,考虑到所有分支都是 master 的后代,并且我确实希望在所有 site* 分支中进行这些更改,我切换到每个分支并合并 master。
这为所有分支创造了一个看起来很糟糕的历史。每一轮合并都会使图变得相当复杂,这使我得出两个结论:
- 只要我注意自己的步骤并且不做任何愚蠢的事情,并且不试图从所有分支历史图表中获得任何意义,这种分层分支的方式就可以工作。或者..
- 必须有一些更好,更合适的方法来做到这一点。
为了说明我的“问题”,我将给出创建这些分支后得到的图形图像,添加一些特定于分支的提交,挑选其中的几个,添加并合并从 master 到所有分支的提交,提交或两个到特定的分支,然后再进行一个 master-to-all 合并。
我不知道,我喜欢简单,也许我不习惯看到像这样难以理解的图表(恐怕每次合并都会变得更加复杂)。
我想我可以一直进行挑选,并拥有整洁的历史图表,但这听起来也不对,因为我可能会连续进行几次提交,然后忘记选择其中一个到所有其他分支。 ..
所以... 有什么想法、经验和建议,您不介意分享吗?
更新:我选择了我对已接受答案的评论中描述的解决方案。感谢所有贡献的人!
更新 2:尽管它与这个问题并没有密切相关,但最近我偶然发现了这种似乎适用于几乎任何有组织的开发周期的分支模型,其中 GIT 作为底层 DVCS。这真是一本好书。受到推崇的。