繁体   English   中英

如何使用一个遥控器推送到一个网址并从另一个网址拉取?

[英]How can I push to one url and pull from another using one remote?

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

$ 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/*

直截了当的回答

您正在寻找的命令是:

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。 因此,当您推送时,下一次获取的结果应该会改变——这显然不会。

最佳实践

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

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

git fetch upstream
git merge upstream/master

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

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

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

除非我弄错了,否则git remote set-url没有--pull选项之类的东西: https : --pull

尝试使用带有拉和推的 set-url:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM