【问题标题】:How can I push to one url and pull from another using one remote?如何使用一个遥控器推送到一个 URL 并从另一个 URL 拉取?
【发布时间】:2013-04-09 13:21:52
【问题描述】:

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

$ 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 github


    【解决方案1】:

    直截了当的答案

    您要查找的命令是:

    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 假定这是 same 存储库。所以当你 push 时,下一次 fetch 的结果应该会改变——它显然不会改变。

    最佳实践

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

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

    git fetch upstream
    git merge upstream/master
    

    【讨论】:

    • 我使用 upstream 和 origin 来支持 git 本身,所以我从上游获取,同时从 Github 上的个人 origin 推/拉。查看 git 邮件列表,了解有关三角形工作流程的最新讨论。
    • ?这和我解释的不完全一样吗?
    • 这两个方面的混合可能让我写了评论。也许如果答案是从你的“正确的方式..”段落开始的,并且只有在给出了正在寻找的命令和“不要那样做”的情绪之后。我想这取决于写作风格。如有冒犯,我们深表歉意。
    • 没有冒犯——我只是困惑:)
    【解决方案2】:

    Git 1.8.3 介绍了有助于三角工作流的设置。

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

    使用任一设置,git push(没有其他参数)将推送到您首选的远程,而不是分支的上游远程。详情请见1.8.3-rc2 announcement。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        尝试将 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
        

        【讨论】:

          猜你喜欢
          • 2014-08-11
          • 1970-01-01
          • 1970-01-01
          • 2022-11-02
          • 2022-06-23
          • 1970-01-01
          • 2013-03-13
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多