6

我已经创建了这个存储库的克隆。如果我运行以下命令,我会看到我的本地存储库已配置为使用我的克隆来获取/拉取,正如预期的那样。

$ git remote show origin
* remote origin
  Fetch URL: https://github.com/domurtag/airbrake-grails.git
  Push  URL: https://github.com/domurtag/airbrake-grails.git

我希望我的本地存储库改为从主存储库(我克隆的那个)获取并推送到我的克隆。我做的第一件事是将主仓库添加为远程:

$ git remote add cavneb https://github.com/cavneb/airbrake-grails.git

如果我再次运行,git remote show origin我会看到相同的输出,所以显然我需要做其他事情来表明cavneb应该使用 repo 来获取,但我不确定这是什么。

如果它是相关的,我已经展示了我.git/config下面的内容:

[core]
    repositoryformatversion = 0
    filemode = true
    logallrefupdates = true
[remote "origin"]
    url = https://github.com/domurtag/airbrake-grails.git
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
    remote = origin
    merge = refs/heads/master
[remote "cavneb"]
    url = https://github.com/cavneb/airbrake-grails.git
    fetch = +refs/heads/*:refs/remotes/cavneb/*
4

4 回答 4

12

直接回答

您正在寻找的命令是:

git remote set-url origin https://github.com/cavneb/airbrake-grails.git
git remote set-url origin --push https://github.com/domurtag/airbrake-grails.git

然而

但我强烈建议不要这样做。

即使我不完全确定,对于上述行为,git会/可能会很困惑。

像上面那样完成后,git假设这是同一个repo。所以当你 push 时,下一次 fetch 的结果应该改变——它显然不会改变。

最佳实践

处理您的情况的正确方法master是将存储库添加为额外的遥控器。同样,作为另一个最佳实践,我将其称为 repo upstream

当你想从那个额外的 repo( upstream) 中提取时:

git fetch upstream
git merge upstream/master
于 2013-04-09T13:39:12.603 回答
4

Git 1.8.3引入了有助于三角工作流的设置。

remote.pushdefault:将更改推送到的遥控器。可以通过设置在特定分支上覆盖branch.<branch>.pushremote

无论使用哪种设置,git push(没有其他参数)都会推送到您首选的远程,而不是分支的上游远程。有关详细信息,请参阅1.8.3-rc2 公告

于 2013-09-01T20:24:53.770 回答
1

除非我弄错了,否则没有这样的--pull选择git remote set-urlhttps ://git-scm.com/docs/git-remote#git-remote-emset-urlem

于 2018-09-17T15:53:46.240 回答
0

尝试将 set-url 与 pull 和 push 一起使用:

git remote set-url --pull origin https://github.com/domurtag/airbrake-grails.git
git remote set-url --push origin https://github.com/cavneb/airbrake-grails.git
于 2013-04-09T13:44:48.880 回答