Visual Studio Team Explorer GitHub - 当你有两个遥控器时,你如何指定一个用于传出提交?

Visual Studio Team Explorer GitHub - when you have two remotes how do you specify the one used for outgoing commits?

我遇到了与 SF 5181845 相同的问题,想要在 GitHub 上使用 public 存储库作为我项目的起点,同时保留合并到它在 public 回购中所做的任何更改。这似乎是一个常见的场景。

我首先使用 Git 命令行实用程序在 GitHub 上创建一个空的私有存储库。然后,我将 public 存储库从 github 克隆到我机器上的本地存储库,并将其远程从 'origin' 重命名为 'upstream'。接下来,我在我的空私人仓库的 URL 中添加了第二个名为 'origin' 的遥控器,然后最终将我的本地仓库推送到它。一切似乎都很好,所以我使用 Visual Studio 打开解决方案并着手进行我的更改,这些更改已正式提交到我的本地存储库。不幸的是,我在使用 Team Explorer 同步到我在 GitHub 上的私人仓库时遇到了问题 - 即推送传出提交。它失败了,因为 Team Explorer 试图推送到 public 回购(上游)而不是我自己的私人回购(来源)。

问题:当您有两个遥控器时,如何指定团队资源管理器用于传出提交的遥控器?

我通过更改团队资源管理器中的存储库设置找到了解决方法。我编辑了上游遥控器并将推送 URL 设置为我在 GitHub 上的私人仓库,以代替 public 的 URL。

其他:这是我的分支在团队资源管理器中的样子 - 请参阅下面的答案

如果当前分支正在跟踪来自特定远程(例如:上游)的远程跟踪分支,则推送将默认推送到该远程。如果当前分支没有跟踪任何分支并且只有一个远程,Team Explorer 将推送到该远程。如果有多个遥控器,Team Explorer 将默认使用 'origin' 遥控器(如果找到)。

SO 5181845 for providing two remotes so you can modify a project in your own private repo whilst still being able to pull updates from a public repo was not complete. It is missing the git command provided by SO 4878249 提供的解决方案更改了您的本地分支,因此它跟踪您的私人回购而不是 Chad B pointed-out 友善的 public 一个 - 请参阅评论。

git branch master --set-upstream-to origin/master

因此完整的配方是:

  1. 在 GitHub 上创建一个新的存储库并获取它的 URL https://github.com/myname/myproject.git
  2. 在你的机器上创建一个工作目录,比如 src
  3. 将基础项目克隆到此目录中,比如 https://github.com/sharedwork/baseproject.git
  4. 设置您的 master 分支,使其跟踪 myproject 而不是 baseproject
mkdir src
cd src 
git clone https://github.com/sharedwork/baseproject.git
cd baseproject
git rename origin upstream
git remote add origin https://github.com/myname/myproject.git
git push origin master
git branch master --set-upstream-to origin/master

您现在可以在 Visual Studio 中打开解决方案并使用团队资源管理器以正常方式将您的更改推送到 https://github.com/myname/myproject.git。传出提交将转到 myproject 而不是 baseproject。

更新 https://github.com/sharedwork/baseproject.git 后,您可以使用以下 git 命令将更改拉入您的项目。

cd src\baseproject
git pull upstream master

但是,您可能必须合并由 baseproject 更新且您也已更改的任何文件中的更改。