我正在尝试使用git以灵活的方式为不同的平台,客户端和功能管理大型项目...
作为一个简单的例子(为了理解它是什么问题,但实际上它会更复杂)假设我有我的主分支,我添加了所有常见的来源。从中我为不同的操作系统创建分支,例如win(对于Windows),gnu(对于GNU)等,以及客户端可以要求或不要求的任何功能的分支(为了简单起见,我称之为client_a和client_b)。
* client_b
| * client_a
|/
| * gnu
|/
| * win
|/
* master
这样一来,如果一个客户端要求使用我在client_b分支中执行的功能在Windows上运行的应用程序,我可以从分支'win'创建一个分支(winB):
git checkout -b winB
git merge client_b
这个新分支将包含client_b中包含的所有功能,并准备生成Win应用程序,至少这是我的意图。问题是,这样做,如果我想修复一个错误或在分支client_b中添加更多代码,我希望winB和所有其他分支取决于client_b也得到这些改变我必须一个接一个地做这样的事情(这是winB的具体案例
git rebase client_b
git merge win
请注意,当我必须在master中添加一些全新的东西时,这甚至是最糟糕的!所以,我的问题是,有了这个场景,你将如何管理这些分支并轻松地将合并的结果(在我们的案例中为winB)更新,而不必逐一进行这些分支的重新定位和合并?其他更好的方案也可以提出建议。
提前致谢!
答案 0 :(得分:0)
你有几个选择。
首先,如果客户端代码分支在其他任何地方使用(其他人正在对其进行编码),那么您不应该使用rebase。 rebase重写历史,包括SHA1,如果其他人依赖历史,可能会引起很多悲痛。
第一个选项是创建要素的补丁并将其应用于您想要该要素的分支。
第二种是将樱桃选择进入你想要的树枝。
第三种方法是简单地合并更改,如果你的某些分支机构与主分支机构分离以启用本地功能(例如Windows),则无法使用此功能。
我会选择补丁或樱桃选择并编写一个脚本,以便为特定分支或分支组自动执行此过程。
E.g:
apply_patches_for_win windows-feature.patch
或
cherry_pick_for_win commit_SHA1
如果rebase仍然是最好的选择,你也可以写一个脚本来重新分支分支。