在我的公司,我们有一个为每个客户定制的基础软件。今天使用 SVN,我们有这样的设置:
/trunk
/tags
…
/branches
/client_project_x
/client_project_y
/client_project_z
在 git 中组织这个最好的方法是什么?每个项目都有一个远程存储库和一个用于基本代码的远程存储库,还是有一个带有多个分支的大型远程存储库?
如果我们使用带有多个分支的大型远程仓库,有没有办法从远程仓库克隆一个分支?
在我的公司,我们有一个为每个客户定制的基础软件。今天使用 SVN,我们有这样的设置:
/trunk
/tags
…
/branches
/client_project_x
/client_project_y
/client_project_z
在 git 中组织这个最好的方法是什么?每个项目都有一个远程存储库和一个用于基本代码的远程存储库,还是有一个带有多个分支的大型远程存储库?
如果我们使用带有多个分支的大型远程仓库,有没有办法从远程仓库克隆一个分支?
从概念上讲,一个存储库中的多个分支与多个存储库中的分支之间没有区别。DVCS 的全部意义在于消除这种区别。您想根据需要访问和控制任何给定分支的人员来考虑它。如果每个开发人员都可以访问每个客户端的代码,那么将它们全部放在一个中央存储库中会更容易。您可以选择要克隆或不克隆的分支,尽管克隆整个 repo 是最简单的。如果您需要在不同的分支中拥有非常不同的访问权限,最好为它们创建单独的存储库。
换句话说,以任何一种方式设置它都可以让开发和测试团队更容易。
单独的项目应该在单独的存储库中。
(就像使用 git 一样简单。将大量不相关或松散相关的项目保存在单个存储库中,无论是在大树中还是在单独的分支中,都没有优势,也有很多潜在的劣势。)
git 的诞生是为了让分支/合并分支变得如此简单,所以只需根据需要创建分支以获取新功能、测试功能、与子团队合作,而不会影响公司的其他部门!例如,Linux 有数千个分支,而且还在不断增长!
观看Linus Torvalds 的这个视频,这将帮助您了解他在开发 git 时所拥有的“头脑”价值观。
我使用了几个回购:
核心在一个存储库中,每个插件和每个客户端都有自己的存储库:
在安装或构建过程中不会修改核心中的单个文件。每个客户都有相同的核心。核心包含自定义方法的钩子。
我不喜欢为客户修改分支的核心文件。我认为如果您有超过 5 个客户,这会变得很困难。