79

我不时遇到这个问题。

假设我做了以下阅读 Rails 的源代码,因为我遇到了一些问题。

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

在研究期间,我测试了一些东西,现在我有一个修复,我希望 Rails 核心团队看看。如何将我的更改推送到分叉版本的 rails。

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

并不是说我反对分叉。只是有时我想我只是要浏览然后我想添加一些东西。

4

4 回答 4

115

当你克隆一个 repo 时,它会自动设置一个远程调用origin,它引用你克隆的 repo。这现在指向上游 Rails 项目,但是您需要创建自己的可以推送到的 fork,然后设置一个指向那里的远程,以便您可以推送到它。

第一步,点击上游GitHub项目页面的“Fork”按钮(图片来自GitHub上forking的说明):

GitHub 分叉按钮

完成后,找到并复制该 repo 的 URL。确保使用具有读写访问权限的 SSH URL。它应该类似于git@github.com:nadal/rails.git,假设您的用户名是nadal.

现在您可以创建远程,它允许 Git 跟踪远程存储库,根据您拥有的访问权限从其中提取或推送到它。您可以选择替换origin为您将推送到的那个(即设置了多少人),或者保留origin指向上游并创建一个新的遥控器。我将展示如何进行第一次设置;第二个应该很容易弄清楚。

要更改origin为指向您在 GitHub 上的分支,您可能希望将上游分支保留在某个地方,因此将其重命名为upstream

git remote rename origin upstream

现在创建一个指向你的 fork 的新远程:

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

现在你应该可以推送到你的新分叉了:

git push origin master

一旦您对推送到 GitHub 的更改感到满意,并希望 Rails 团队的某个人查看它,您有两个选择。一种是使用 GitHub发送拉取请求;请参阅那里的文档以了解如何执行此操作。但是,如果您只有一个或几个小补丁,Rails 团队希望您创建一个 Lighthouse 票证并附上您的补丁;有关更多信息,请参阅有关为 Rails 做出贡献的说明。

编辑这是一个图表,表明发生了什么。您所做的只是克隆上游 rails repo;所以现在您在自己的机器上拥有自己的 repo,它指的git://github.com/rails/rails.gitorigin

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遥控器,因此您可以跟踪官方更改并将它们合并到您的代码中(如果您创建了分叉版本,您可能希望将upstream遥控器添加为出色地)。

于 2010-11-17T21:36:47.930 回答
3

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

安装后,只需运行

hub fork

从您的只读克隆中。

于 2013-12-05T20:41:18.643 回答
1

没关系。如果您愿意,您可以添加另一个遥控器,指定您的非分叉存储库。推动你的改变。

于 2010-11-17T21:17:45.023 回答
0

或者,如果您不想分叉,并且取决于维护团队,您可以创建并向他们提交补丁。通常,尽管您可以通过在 github 上分叉(如其他评论中所述)或在您自己的 git repo 上提供您的 repo,并向原始 repo 的维护者提供您希望他们合并的 repo 和分支的信息。

于 2010-11-17T21:43:08.633 回答