4

设想:

  • 在 github 上存在用户“guru”和他的名为“bigsw”的项目的主要存储库。这个主仓库有几个分支。(“rel1”、“rel2”、“主”)
  • 这个项目有 2 个由 user1 和 user2 制作的分叉。
  • 每个 abobe 分叉都具有与主存储库相同的分支,以及一个包含其特定工作的不同分支。因此,user1 分叉了 bigsw 并创建了一个名为“utf8”的分支,而 user2 创建了一个分支“mongo”。

  • 现在我想加入该项目,对于我的工作,我需要以下分支:

    • 大师/bigsw:大师
    • user1/bigsw:utf8(读作:USER/REPO:BRANCH)
    • 用户 2/bigsw:mongo

推荐的工作流程应该是什么?

我的想法是:

  1. 在 github 上 fork guru/bisgw(这样会得到 myname/bigsw)
  2. git clone git://github.com/myname/bigsw(获取本地副本)

  3. 想要保持 user1/bigsw:utf8 分支的同步本地副本,并且同样想要来自 user2 的 fork 的分支“mongo”的副本。所以,我不需要从 user1 和 user2 克隆完整的 repo,每个分支只需要一个分支。有点像:

    • git remote add user1 git@github.com:user1/bigsw.git
    • git fetch user1
    • git checkout -b utf8 user1/utf8
    • 同样对于user2的mongo repo(我不确定前两个命令)

  4. git checkout -b i18n(创建我自己的分支 - 我将在其中进行更改)
  5. 编辑源代码(我希望在上一个命令之后它们会自动“进入”“i18n”分支)
  6. git push origin i18n(将我对 github 的更改推送到 myname/bigsw:i18n 分支)
  7. 将来某个时候会为我的 i18n 分支提交拉取请求/不知道如何,但还不需要它;)/

以上是正确的工作流程吗?如果是,问题:

  • 如何将 user1 的分支“utf8”和 user2 的“mongo”分支克隆到我的本地机器中 - 3.) 中的命令是否正确?
  • 如何保持同步(所以我想在我的本地机器上同步所有分支) - 我的更改将在我的分支“i18n”中。

我是 git/github 的新手——不幸的是需要从这个复杂的模型开始(至少对我来说)。我学到了一些挖掘https://help.github.com/的东西,但并不理解所有的“git 哲学”。

我已经读过:

但仍然在黑暗中徘徊...... :(

4

1 回答 1

2

总体不错,但我有一些建议。

我会忽略git checkout -b userX userX/branch电话。相反,我会确保我在 guru 的原始分支中并创建一个本地分支,您可以在其中将两个遥控器合并在一起,如下所示:

git checkout -b utf8-mongo
git merge user1/utf8
git merge user2/mongo

您可能会遇到乍一看可能看起来很可怕的合并冲突,但您最终会找到解决方法(查找有关如何解决合并冲突的指南,如果不确定要优先考虑哪个更改,请与作者进行对话)。

然后,您可以使用以下方法创建自己的分支:

git checkout -b i18n

正如你所怀疑的那样。进行更改并遵守规则,尽早提交,经常提交。每当您想从所有上游分支中提取更改时,请执行以下操作:

git checkout utf8-mongo
git pull guru/master
git pull user1/utf8
git pull user2/mongo

像上面那样解决您那里的任何合并冲突,然后切换回您的分支并获取新的更改:

git checkout i18n
git merge utf8-mongo

拆分分支背后的基本原理是合并冲突很难管理,您将来可能会丢弃您的分支并从头开始。在这种情况下,您不想再次合并其他分支,因此您将它们保存在单独的分支中。

当使用 githubs Web 界面进行拉取请求时,您只请求从您的分支 i18n 拉取。人们(即大师)可能会不高兴,因为您拉入了许多其他民族的分支,这些分支可能还不够成熟,无法合并到他自己的分支中。您可能需要一些邮件联系来协调该拉动。最好的可能是从一开始就与开发人员进行健康的沟通。

于 2012-06-17T11:27:29.540 回答