重复的gitconfig条目导致推送失败

时间:2018-03-16 19:53:34

标签: git

从git版本2.16.2开始 在/ etc / gitconfig和$ {HOME} /。gitconfig中我有以下条目:

[remote "origin"]
    push = HEAD

当我尝试推送时,我收到以下错误:

$ git push
error: dst ref refs/heads/some/branch receives from more than one src.
error: failed to push some refs to 'git:/foo/bar/source.git'

如果我改为使用git push origin some/branch,则可行。

如果我在${HOME}/.gitconfig中注释掉配置,那么git push就可以了

$ git push
Counting objects: 21, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (18/18), done.
Writing objects: 100% (21/21), 9.60 KiB | 3.20 MiB/s, done.
Total 21 (delta 11), reused 12 (delta 2)

有人可以解释为什么复制需要更长的git push

1 个答案:

答案 0 :(得分:1)

The git push documentation部分说:

  

如果命令行未指定使用<refspec>...参数或--all--mirror--tags选项推送的内容,则命令会查找默认<refspec>通过咨询remote.*.push配置......

这里遗漏的是Git通过遍历条目来读取配置文件,调用各种回调函数。一个注册要为某些前缀调用的回调函数。在这种情况下,git push会注册remote.origin.push的回调。

它有两个回调。一个人说:

HEAD

而另一个说:

HEAD

哪个Git与push.default结合 - 大概是你设置为simple或类似的东西,所以无论你的HEAD参考是什么,refspec都会变成,例如:

git push origin some/branch:some/branch some/branch:some/branch

这意味着目标参考some/branch应该从两个单独的来源引用更新:some/branchsome/branch。现在,显然(对你我而言),这些是相同的来源,所以这不是一个问题 - 但处理这个问题的内部代码认为它是抱怨的。