如何将只读git克隆从github转换为分叉git
我不时遇到这个问题。
假设我没有阅读rails的源代码,因为我遇到了一些问题。
git clone git://github.com/rails/rails.git
在研究过程中,我testing了一些东西,现在我有一个解决scheme,我想铁轨核心团队来看看。 如何将我的更改推送到分支版本的rails。
请记住,当我克隆时,我没有克隆分支版本,而是只读版本。
这不是我反对分歧。 只是有时候我觉得我只是去浏览,然后我想添加一些东西。
当你克隆一个仓库时,它会自动设置一个远程叫做origin
,它指的是你已经克隆的仓库。 这现在指向上游的Rails项目,但是你需要的是创build你自己的分支,然后设置一个指向那里的分支,这样你就可以推送到它。
第一步是点击上游GitHub项目页面上的“Fork”button(来自GitHub分支指令的图片):
一旦你完成了,find并复制该回购url。 确保使用具有读取和写入权限的SSH URL。 它应该是像git@github.com:nadal/rails.git
,假设你的用户名是nadal
。
现在,您可以创build远程控制台,它允许Git跟踪远程存储库,从中取出或推送,具体取决于您的访问权限。 您可以select将origin
replace为您要推送的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
远程的)。
这应该不重要。 如果你愿意,你可以添加另一个远程,指定你的非分叉回购。 推送您的更改。
或者,如果您不想分叉,并根据维护团队,可以创build并提交补丁。 一般来说,你可以通过在github上分叉,或者在你自己的git仓库中使用你的repo,并且把原始repo的维护者提供给你想要它们合并到你的repo和分支的信息。