在私有 git 服务器上分支 public git 存储库

Branch a public git repository, on a private git server

我在本地 Fedora 机器上有自己的 git 服务器。我有两台开发机器,一台本地的 Fedora 机器,一台本地的 Windows7 机器。 (开发机器和 git 服务器都在本地网络上,所以我通过这种方式获得比使用 github 更快的速度。)

有一个我使用的 BSD 许可库的 github 存储库。我想做我自己的更改,我可以推送到我自己的 git 服务器,可以选择提交一些但不是所有补丁或推送到 github。

我希望我的本地存储库能够提取从 github 存储库所做的更改。 (我知道如果 github 存储库在我进行本地更改的地方发生变化,我可能必须进行手动合并。)

我该怎么做?

我一直在定期更新 github 存储库,将该目录作为新存储库添加到我的本地 git 服务器,重新进行任何更改,然后推送到我的本地 git服务器。

必须有更好的方法。

Git 是分布式的,因此您描述的工作流程基本上就是 Git 的工作方式。

让我们首先考虑您不想提交您的更改。然后你可以 git clone 远程服务器,git remote add 你的私人服务器并推送到它。当上游有你想要的新东西时,git pull 从它那里,当你有任何新东西时,git push 到你的私人服务器。在这个工作流程中,您的私人服务器和 public 上的提交是相同的(特别是相同的 sha1),但是您的私人服务器有一些 public 服务器没有的提交。

第一个使用 git clone,另一个使用 git remote add,反之亦然,变化不大。 git clone 配置默认上游(以便无参数 git pullgit push 与该远程同步),因此最简单的是从您最常使用的远程 git clone。但您可以稍后更改默认上游(例如 git push --set-upstream)。

建议阅读:Working with remotes.

现在,如果您想向上游提交更改,困难在于您不能只将一个分支推送到 github。实际上,除了要保密的更改之外,您可能还需要提交一些更改,因此提交必须涉及某种合并,并且可能需要解决冲突。您可以通过创建一个像 for-github 的分支(从 public 历史的尖端分支)和 git cherry-pick 您想要贡献给这个分支的更改来做到这一点。然后,把这个分支推到github。可能更好:对于你想贡献上游的每个功能,为这个功能创建一个分支,挑选相关的提交,推送并在 github.

上发出拉取请求

建议阅读:git cherry-pick.