Git 保持多个遥控器同步的正确方法?
Git proper method to keep multiple remotes in sync?
这是设置。我有一个主 github 存储库,我称之为 team/repo
,还有一个分支,我称之为 me/repo
。在 me/repo
上,我在 feature
分支中做了一些更改(还有一个 master
分支),并在 team/repo
中创建了一个对 develop
分支的拉取请求.从 team/repo
中的 develop
分支(包括我刚刚提出的拉取请求)返回到 me/repo
中的 master
分支的所有更改的正确方法是什么?
现实中没有“对的方法”,只有不同的strategies/flows团队采用的方法不同
Gitflow分支管理模型?
听起来您可能正在遵循 Gitflow 分支管理模型。在 Gitflow 下,您有一个 master
分支,这是一个半不可触及的提交集,代表已发布代码的永久副本。您还有一个活跃的 develop
个分支(可能不止一个)、release
个分支和 feature
个分支。
正在同步分叉
因为你有一个 repo 的分支,它也在 Github 上(如果我没理解错的话),然后你的 PC 上也会有一个本地 repo。通常,您会将分支 (me/repo
) 设置为标准 origin
遥控器,然后将原始 team/repo
设置为名为 upstream
的遥控器。当您想要更新您的分叉时,您可以从团队存储库 (upstream
) 中下拉,然后将这些更改推送到您的分叉 (origin
)。如果这部分有什么问题,请参阅This Answer on "Syncing A Fork"。
您可能已经完成了所有这些设置 - 不清楚。如果不是以这种方式设置,则以下内容可能偏离目标。
如何获取从 A 到 B 的更改?
现在是答案的核心 - 如何获得从 local/fork
( 到 team/repo
(或 upstream
,原始团队中央仓库)的更改。
首先考虑是否需要分叉。可能是,但除非存在信任问题或者这是一个大型分布式(可能是多团队)项目或开源项目,否则可能不需要分叉。如果可以,请考虑直接在 team/repo
中的功能分支中工作,避免分叉增加的复杂性。
假设需要分叉,您使用 feature
分支,并在 develop
分支上对 team/repo
执行拉取请求。这很好,并且会将您的更改作为一系列提交中的变基,或作为组合的单个提交。
从这里开始,how/when 到 master
的变化完全取决于您团队的工作流程。如果按照Gitflow开发,没必要立马去master
。您应该将 feature
分支从 develop
分支出来,而不是从 master
分支出来。在你的 PR 进入 develop
之后,只需将新的 develop
提交拉入你的本地仓库,然后向上推送到你的分支,然后创建一个新的 feature
分支 develop
或继续在您现有的 feature
分支工作,直到需要下一个 PR。
最终,团队会将 develop
次提交合并到 master
中,其中一些可能最终也会出现在 release
个分支中。如果是这样,有时您可能需要分支 master
或 release
分支而不是 develop
,但新功能应该从 develop
分支出来,不是 master
(develop
会合并到 master
并从 master
拆分出来)。
您的团队可能会以不同的方式处理这个问题,但这应该会让您了解它的工作原理并让您提出正确的问题。重点是这里不一定有问题,你的更改需要立即进入master
。如果他们确实将其放入 master
,您仍然会将它们从 upstream
中拉下来,尽管您可能需要检查您的本地 master
并将其合并到 upstream/master
以快速-转发它,然后将它推到你的叉子上。
这是设置。我有一个主 github 存储库,我称之为 team/repo
,还有一个分支,我称之为 me/repo
。在 me/repo
上,我在 feature
分支中做了一些更改(还有一个 master
分支),并在 team/repo
中创建了一个对 develop
分支的拉取请求.从 team/repo
中的 develop
分支(包括我刚刚提出的拉取请求)返回到 me/repo
中的 master
分支的所有更改的正确方法是什么?
现实中没有“对的方法”,只有不同的strategies/flows团队采用的方法不同
Gitflow分支管理模型?
听起来您可能正在遵循 Gitflow 分支管理模型。在 Gitflow 下,您有一个 master
分支,这是一个半不可触及的提交集,代表已发布代码的永久副本。您还有一个活跃的 develop
个分支(可能不止一个)、release
个分支和 feature
个分支。
正在同步分叉
因为你有一个 repo 的分支,它也在 Github 上(如果我没理解错的话),然后你的 PC 上也会有一个本地 repo。通常,您会将分支 (me/repo
) 设置为标准 origin
遥控器,然后将原始 team/repo
设置为名为 upstream
的遥控器。当您想要更新您的分叉时,您可以从团队存储库 (upstream
) 中下拉,然后将这些更改推送到您的分叉 (origin
)。如果这部分有什么问题,请参阅This Answer on "Syncing A Fork"。
您可能已经完成了所有这些设置 - 不清楚。如果不是以这种方式设置,则以下内容可能偏离目标。
如何获取从 A 到 B 的更改?
现在是答案的核心 - 如何获得从 local/fork
( 到 team/repo
(或 upstream
,原始团队中央仓库)的更改。
首先考虑是否需要分叉。可能是,但除非存在信任问题或者这是一个大型分布式(可能是多团队)项目或开源项目,否则可能不需要分叉。如果可以,请考虑直接在 team/repo
中的功能分支中工作,避免分叉增加的复杂性。
假设需要分叉,您使用 feature
分支,并在 develop
分支上对 team/repo
执行拉取请求。这很好,并且会将您的更改作为一系列提交中的变基,或作为组合的单个提交。
从这里开始,how/when 到 master
的变化完全取决于您团队的工作流程。如果按照Gitflow开发,没必要立马去master
。您应该将 feature
分支从 develop
分支出来,而不是从 master
分支出来。在你的 PR 进入 develop
之后,只需将新的 develop
提交拉入你的本地仓库,然后向上推送到你的分支,然后创建一个新的 feature
分支 develop
或继续在您现有的 feature
分支工作,直到需要下一个 PR。
最终,团队会将 develop
次提交合并到 master
中,其中一些可能最终也会出现在 release
个分支中。如果是这样,有时您可能需要分支 master
或 release
分支而不是 develop
,但新功能应该从 develop
分支出来,不是 master
(develop
会合并到 master
并从 master
拆分出来)。
您的团队可能会以不同的方式处理这个问题,但这应该会让您了解它的工作原理并让您提出正确的问题。重点是这里不一定有问题,你的更改需要立即进入master
。如果他们确实将其放入 master
,您仍然会将它们从 upstream
中拉下来,尽管您可能需要检查您的本地 master
并将其合并到 upstream/master
以快速-转发它,然后将它推到你的叉子上。