为什么git fetch origin <hash>给出非零而不是错误消息?

时间:2018-02-05 07:28:16

标签: git

发生了这种情况:

$ git fetch origin 883c5186f0a17190453bfda1bcf1716e7f5fc8e2 && echo "everything is fine"
$ git fetch origin 883c5186f0a17190453bfda1bcf1716e7f5sdfsd
fatal: Couldn't find remote ref 883c5186f0a17190453bfda1bcf1716e7f5sdfsd

然后我尝试了一个分支git fetch origin staging,然后git fetch origin 883c5186f0a17190453bfda1bcf1716e7f5fc8e2将返回0.没有迹象表明出了什么问题,这里的实际问题是什么?

1 个答案:

答案 0 :(得分:2)

正如git-config中所述:

  

<强> uploadpack.allowTipSHA1InWant

     

当uploadpack.hideRefs生效时,允许upload-pack接受   获取请求在隐藏引用的尖端请求对象(通过   默认情况下,这样的请求被拒绝)。另请参见uploadpack.hideRefs。   即使这是错误的,客户也许可以通过网站窃取对象   gitnamespaces [7]的“SECURITY”部分描述的技术   手册页;最好将私有数据保存在一个单独的存储库中。

     

<强> uploadpack.allowReachableSHA1InWant

     

允许upload-pack接受请求对象的获取请求   可以从任何参考提示到达。但是,请注意计算   对象可达性在计算上是昂贵的。默认为false。   即使这是错误的,客户也许可以通过网站窃取对象   gitnamespaces [7]的“SECURITY”部分描述的技术   手册页;最好将私有数据保存在一个单独的存储库中。

     

<强> uploadpack.allowAnySHA1InWant

     

允许upload-pack接受请求任何对象的获取请求   一点都不默认为false。

如果您想在不使用任何引用的情况下获取特定提交,则应在远程存储库的配置中将这些变量中的一个或多个设置为true。否则,远程存储库将拒绝获取请求。

默认情况下它们是假的,并且大多数服务器端存储库都没有将它们设置为true,因为存在安全问题以及在没有ref的情况下查找提交的额外成本。因此,git fetch origin 883c5186f0a17190453bfda1bcf1716e7f5fc8e2失败,因为服务器拒绝特定提交的获取请求。运行git fetch origin staging后,提交和相关对象将被下载并存在于本地存储库中,因此以下git fetch origin 883c5186f0a17190453bfda1bcf1716e7f5fc8e2不必从远程存储库获取它们,并且它不会返回任何错误是合理的