如何推送到与我从中提取的存储库不同的存储库

How to push into a repository different from the repository I'm pulling from

我已经克隆了一个 public github 存储库并开始在本地修改一些文件。

现在我想提交这些更改并将其推送到私有存储库中,但仍然能够从 public 存储库中提取和合并更改。

我如何设置 git 来做到这一点?

我知道我可以分叉 public 项目并处理分叉版本,但我不会将我的更改合并到 public 存储库中,所以我不认为这是正确的解决方案。

您可以定义多个远程存储库。

$ git remote add repo1 <repo1_url>
$ git remote add repo2 <repo2_url>

现在你有 2 个远程仓库,假设你在 repo1master 分支上,如果你的分支正在跟踪远程 master 分支,你可以直接 git pull然后你可以使用

推送到另一个仓库
$ git push repo2 <branch_name>

现在您已将分支推送到另一个存储库。

I know I could fork the public project and work off the forked version, but I am not going to merge my changes into the public repo, so I don't think it's the correct solution.

这是一个有效的解决方案,即使您无意提出任何拉取请求。

如果您不希望您的更改可见(在 public 存储库中,就像 fork 存储库一样),这将不是一个有效的解决方案

在这种情况下,创建一个空的私有存储库(例如在 Bitbucket 上)并且:

cd /path/to/local/repo
git remote rename origin upstream
git remote add origin /url/to/private/repo
git push --mirror

将 link 保留到原始 public 存储库(此处引用为 'upstream')很重要,以便能够在 upstream/master 上获取或变基(并从该存储库获取最新更新)。

我会将远程源更改为私有仓库:

git remote delete origin
git remote add origin git@server:user/repo.git

现在您可以使用

推送到私人仓库
git push origin BRANCH_NAME

要从 public 存储库中提取(并合并)我会创建另一个遥控器,我们称之为 upstream:

git remote add upstream git@server:public/repo.git

您现在可以从上游获取:

git fetch upstream master

并可能将其合并到您的本地分支中:

git merge upstream/BRANCH_NAME