首页 > 解决方案 > 我们可以在不同的远程存储库中设置分支的上游吗

问题描述

在配置文件中,一个分支被设置为在远程存储库中有一个上游

[branch "mybranch"]
    remote = myremote
    merge = refs/heads/mybranch

我们是否可以在第三个远程存储库中设置上游,以便当当前分支为 时mybranchgit push <remote>无需refspec为分支指定即可工作?例如,以下是否可行?

[branch "mybranch"]
    remote = myremote
    merge = refs/heads/mybranch

[branch "mybranch"]
    remote = yourremote
    merge = refs/heads/mybranch

标签: git

解决方案


例如,以下是否可行?

[branch "mybranch"]
    remote = myremote
    merge = refs/heads/mybranch

[branch "mybranch"]
    remote = yourremote
    merge = refs/heads/mybranch

不。Git 配置文件足够灵活,可以支持这一点,尽管不需要第二部分。也就是说,您可以更简单地写成:

[branch "mybranch"]
    remote = myremote
    remote = yourremote
    merge = refs/heads/mybranch

但只有少数 Git 部分使用了多种设置。1git push命令特别决定您是否指定了远程,如果没有,它将获取最后一个设置(当前分支在哪里)。然后它决定你是否指定了一个 refspec,如果没有,则使用你的设置来决定如何要求另一个 Git 根据你的当前提交更新它的名称之一。所以:branch.branch.remotebranchpush.defaultbranch

  • 如果你指定一个remote参数,这两个远程设置是不相关的;
  • 如果没有,Git 会选择最后一个。

这意味着除最后一项之外的所有设置都变得无关紧要。

(有多种方法可以使用三角工作流,您可以从一个存储库获取但推送到另一个存储库,但这不是一种。使用谷歌搜索找到一些。)


1git fetch命令确实使用了多个设置:fetch = ...当它执行默认设置时,它采用任何给定遥控器的所有设置git fetch。那是:

[remote "origin"]
    fetch = +refs/heads/master:refs/remotes/origin/master
    fetch = +refs/heads/develop:refs/remotes/origin/develop

生成一个类似于单分支克隆的存储库,不同之处在于它是我们可以称之为双分支克隆的东西。


推荐阅读