`remote。<name> .push`和`push.default`有什么区别?

时间:2019-01-10 00:42:00

标签: git

remote.<name>.pushpush.default有什么区别?

它们都为refspec指定默认的git push参数吗?

如果是,它们之间的优先顺序是什么?

remote.<name>.push是否适用于特定的远程存储库<name>,而push.default是否适用于所有远程存储库?

谢谢。

1 个答案:

答案 0 :(得分:2)

您怀疑,remote.name.push仅适用于指定的远程 name 。如果存在,它将提供默认的refspec。例如,执行以下操作:

git config remote.zorg.push refs/heads/master:refs/heads/master

表示git push zorg等同于git push zorg refs/heads/master:refs/heads/master

但是,push.default 至少不直接提供默认的refspec。可以将其设置为五个值之一:

  • nothing:没有参考说明的推送是错误
  • current:没有引用说明的推送意味着“将当前分支推送到同名的分支”
  • upstreamtracking:没有引用说明的推送意味着“将当前分支推送到其上游”
  • simple:类似于upstream,但上游设置必须与分支名称匹配
  • matching:这是最复杂的;参见下文。

请注意,tracking已过时(改为使用upstream)。对simple的约束是,如果您的本地分支名为xyz,则在远程服务器上上游分支也必须命名为xyz

matching设置实际上意味着:

  • 从远程获取所有分支名称的列表(请参见git ls-remote的输出,查找refs/heads/)。
  • 对于每个这样的分支名称,如果您也有一个相同名称的分支,请将其添加到列表中。如果没有,请忽略它。
  • 使用所有产生的名称对作为参考规范。

此模式是Git 2.0之前的Git版本中的默认模式,但是它很容易出错,所以现在不是。