这个想法是您使用一个公共分支和两个(或您需要的任意多个)客户特定的分支。所有常见的更改都进入主服务器,每个客户分支都会获得仅与该客户相关的更改。定期(当 master 被认为处于稳定点时),您会将 master 的更改合并到客户分支 ( git checkout custA; git merge master
)。这会将更新的“通用”代码引入客户分支。你永远不会以其他方式合并——这会用客户特定的代码污染 master。
当您向客户 A 交货时,您检查“custA”分支并将其发送。当然,对于其他客户也是如此。
现在假设您获得了一个新客户“C”,稍后找到客户 A 和 C 想要但 B 不想要的功能。你创建(又名“fork”)master()的一个分支git checkout -b AC_feature master
,对其进行编码/测试,随时提交,然后将其合并到 A 和 C(git checkout A; git merge AC_feature and similarly for customer C
)中。您不要在 A 中对其进行编码,然后依赖于将 A 合并到 C 中,因为这会将所有 A 合并到 C 中。
如果稍后您在该功能中发现一个小错误,您可以在同一个分支 ( git checkout AC_feature; edit/test/commit
) 中进行更改,然后将其合并到 custA 和 custC 中,如上所述。
资料来源:这些令人耳目一新的清晰和有用的文章来自 Gitolite 的开发者 - Sitaram Chamarty,部分由 Junio Hamano(Linus Torvalds 维护 Git 的合作伙伴)直接输入。
维护并行客户分支:
http://gitolite.com/archived/special-branches.html
关于“修复”公共和客户分支的后续文章:
http://gitolite.com/archived/special-branch-fixups.html