从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
?
答案 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/branch
和some/branch
。现在,显然(对你我而言),这些是相同的来源,所以这不是一个问题 - 但处理这个问题的内部代码认为它是抱怨的。