如何将只读git克隆从github转换为分叉git

我不时遇到这个问题。

假设我没有阅读rails的源代码,因为我遇到了一些问题。

git clone git://github.com/rails/rails.git 

在研究过程中,我testing了一些东西,现在我有一个解决scheme,我想铁轨核心团队来看看。 如何将我的更改推送到分支版本的rails。

请记住,当我克隆时,我没有克隆分支版本,而是只读版本。

这不是我反对分歧。 只是有时候我觉得我只是去浏览,然后我想添加一些东西。

当你克隆一个仓库时,它会自动设置一个远程叫做origin ,它指的是你已经克隆的仓库。 这现在指向上游的Rails项目,但是你需要的是创build你自己的分支,然后设置一个指向那里的分支,这样你就可以推送到它。

第一步是点击上游GitHub项目页面上的“Fork”button(来自GitHub分支指令的图片):

GitHub叉子按钮

一旦你完成了,find并复制该回购url。 确保使用具有读取和写入权限的SSH URL。 它应该是像git@github.com:nadal/rails.git ,假设你的用户名是nadal

现在,您可以创build远程控制台,它允许Git跟踪远程存储库,从中取出或推送,具体取决于您的访问权限。 您可以select将originreplace为您要推送的origin (也就是有多less人设置了origin ),也可以将origin指向上游,而是创build新的远程。 我会展示如何做第一个设置; 第二个应该很容易弄清楚。

要将origin改为指向GitHub上的fork,您可能需要将上游分支保留在某处,请将其重命名为upstream

 git remote rename origin upstream 

现在创build一个新的远程指向你的叉子:

 git remote add -f origin git@github.com:nadal/rails.git 

现在你应该能够推动你的新叉:

 git push origin master 

一旦您对推送给GitHub的更改感到满意,并希望Rails团队中的某位成员查看它,则有两种select。 一个是使用GitHub 发送一个请求 。 看到那里的文档如何做到这一点。 但是,如果您只有一个或几个小补丁,那么Rails团队会希望您创buildLighthouse标签并附上补丁; 有关更多信息,请参阅有关为Rails作出贡献的说明。

编辑这里有一个图表来表明发生了什么事情。 你所做的只是克隆上游导轨回购; 所以现在你在自己的机器上有自己的repo,它指的是git://github.com/rails/rails.git作为origin

 Github:git://github.com/rails/rails.git
                     ^
                     |
远程:起源
                     |
你的机器:rails /

如果你分叉,然后克隆你的分叉,这是你得到的:

 Github:git://github.com/rails/rails.git < -  git@github.com:nadal / rails.git
                                                            ^
                                                            |
远程:起源
                                                            |
你的机器:rails /

如果你按照我的指示,这里是你会得到什么:

 Github:git://github.com/rails/rails.git < -  git@github.com:nadal / rails.git
                         ^ ^
                         |  |
远程:上游来源
                         |  |
你的机器:\ ------------------------------- rails /

这就像你通过分叉得到的版本,除了它也有一个upstream远程,所以你可以跟踪正式的变化,并将它们合并到你的代码(如果你已经创build了分叉版本,你可能会想要添加upstream远程的)。

从克隆模式切换到分叉模式的一个非常简单的方法是使用http://hub.github.com/的;hub包装器。

安装完成后,运行

 hub fork 

从您的只读克隆中。

这应该不重要。 如果你愿意,你可以添加另一个远程,指定你的非分叉回购。 推送您的更改。

或者,如果您不想分叉,并根据维护团队,可以创build并提交补丁。 一般来说,你可以通过在github上分叉,或者在你自己的git仓库中使用你的repo,并且把原始repo的维护者提供给你想要它们合并到你的repo和分支的信息。