remote.<name>.push
和push.default
之间有什么区别?
它们是否都将默认的refspec
参数指定为git push
?
如果是,它们之间的优先顺序是什么?
remote.<name>.push
是否适用于特定的远程存储库<name>
,而push.default
是否适用于所有远程存储库?
正如您所怀疑的,remote.name.push
仅适用于指定的远程name
。如果存在,则提供默认的refspec。例如,做:
git config remote.zorg.push refs/heads/master:refs/heads/master
意味着CCD_ 10等同于CCD_。
然而,push.default
并没有提供默认的refspec,至少不是直接提供。它可以设置为五个值之一:
nothing
:没有refspec的推送是一个错误current
:没有refspecs的推送意味着"将当前分支推送到同名分支">upstream
或tracking
:没有refspec的推送意味着"将当前分支推送到其上游">simple
:与upstream
类似,但上游设置必须与分支名称匹配matching
:这是最复杂的;请参见下文
请注意,tracking
已弃用(请改用upstream
)。simple
的约束条件是,如果本地分支的名称为xyz
,则远程上的上游分支也必须命名为xyz
。
matching
设置实际上意味着:
- 从远程获取所有分支名称的列表(请参阅
git ls-remote
输出,查找refs/heads/
) - 对于每个这样的分支名称,如果您也有一个同名的分支,请将其添加到列表中。如果没有,请忽略它
- 使用所有生成的名称对作为refspec
这个模式在Git2.0之前的Git版本中是默认的,但它很容易出错,所以现在不是了。