Github叉子和分支

场景:

>在github上存在用户“guru”和他称为“bigsw”的项目的主要存储库.这个主要回购有几个分支. (“rel1”,“rel2”,“master”)
>此项目有user1和user2制作的2个分叉.
>每个abobe forks都有与主要repo相同的分支,以及包含其特定工作的一个不同分支.因此,user1分叉了bigsw并创建了一个名为“utf8”的分支,user2创建了一个分支“mongo”.
>现在我想加入这个项目,为了我的工作,我需要以下分支:

> guru / bigsw:大师
> user1 / bigsw:utf8(读作:USER / REPO:BRANCH)
> user2 / bigsw:mongo

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

我的想法是:

>在github上分叉guru / bisgw(所以会得到myname / bigsw)
> git clone git://github.com/myname/bigsw(获取本地副本)
>想要保持同步的user1 / bigsw:utf8分支的本地副本,同样要从user2的fork中获取分支“mongo的副本.所以,我不需要从user1克隆完整的repo,而user2只需要从每个分支克隆一个分支.有点像:

> git remote add user1 git@github.com:user1/broadw.git
> git获取user1
> git checkout -b utf8 user1 / utf8
>和user2的mongo repo类似(我不确定前两个命令)

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

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

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

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

我已经读过:

> https://stackoverflow.com/a/5458814/869025(这有很大帮助)
> https://stackoverflow.com/a/9153737/869025 – 给出一些想法,但我不确定
> How to combine two branches from two different repositories in a single repository?
> Forking vs. Branching in GitHub
> git Merging same directory of two different repositories
> https://help.github.com/

但仍然在黑暗中徘徊…… 🙁

最佳答案 一般不错,但我有一些建议.

我会省略git checkout -b userX userX / branch调用.相反,我会确保我在大师的原始分支中并创建一个本地分支,您将两个遥控器合并在一起,如下所示:

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

您可能会遇到合并冲突,这些冲突在第一眼看上去可能看起来很可怕,但您甚至可以通过它们找到自己的方式(查找如何解决合并冲突的指南,如果不确定要优先考虑哪个更改,请与作者进行对话).

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

git checkout -b i18n

正如你所怀疑的那样.进行更改并遵守规则commit early, commit often.只要您想从所有上游分支中提取更改,您就会执行以下操作:

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界面执行pull请求时,您只需要从您的分支i18n中提取.人们(即大师)可能会感到不快,因为你拉进了很多其他人的分支,这些分支可能还不够成熟,还没有合并到他自己的分支中.您可能需要一些邮件联系人来协调拉动.最好的可能是从一开始就与开发者保持健康的沟通.

点赞