如何构建 Git 个分支

How to structure Git branches

我必须设置 git 存储库以基于软件供应商的现有源代码开发软件。源代码会定期更新,我正在寻找最有效的方法,我已经提出了 2 种工作模型,我很想听听您对哪一种(或另一种)在我的工作中最有效的意见情况。

总的来说,将有 3 个完全独立的团队,每个团队在自己独立的代码存储库中工作:A、B、C。

源代码存储库/团队 A 是基于供应商代码的位置。 源代码存储库/团队 B 是基于供应商代码的退出 + 第三方扩展的地方。 我正在尝试设置的源代码存储库/团队 C,应该基于 A + B 和我们自己的扩展。

每当存储库 A 发生变化时,B 团队的人员会将其拉入他们的存储库,集成并使其可供 C 团队使用。

B 队也可以自己制作独立版本(没有来自 A 队的任何更改),他们将为 C 队提供这些版本。

对于团队 C,我会设置存储库单独的分支:

master
TeamA
TeamB
develop

TeamA 和 TeamB 分支将由我们(Team C)管理——每当我们收到来自 A 和 B 团队的代码并将它们合并到开发中时,我们将自行更新它们。

我们的目标是能够理解我们在 TeaA 和 TeamB 之间的差异(开发)是什么(以及 TeamA 和 TeamB 之间的差异),并且最容易地将团队 A 和 B 的更改集成到开发中。

我想知道如果我设置以下结构有什么不同:

1) 使所有分支基于master

master
    TeamA
    TeamB
    develop

或者,2) 构造如下分支的父子结构

master
    TeamA
        TeamB
            develop

我想知道这是否有任何实际区别。

有没有人有过类似的情况,你推荐什么方法?

在 Git 仓库中,每个分支都是独立工作的。因此,您提供的两个结构实际上与其他结构相同。并且您的分支结构可以为您的团队(团队 C)工作。

并且你也可以免除repoC中的TeamATeamB分支,直接从repoA和repoB拉取变化到develop分支:

git remote add -f teamA <URL for repoA>
git checkout develop
#Use git fetch teamA and git fetch teamB when there has new changes on repoA and repoB
git pull teamA/master --allow-unrelated-histories
git pull teamB/master --allow-unrelated-histories
#After making changes and commit changes on develop branch
git checkout master
git merge develop

注意:无论你使用哪个分支结构,你都应该注意到合并冲突,因为三个仓库包含相同的files/code。