忽略“git clone”中的fsck / zero-padded文件模式错误

时间:2016-12-08 00:15:59

标签: git git-fsck

我的全局Git配置中有以下设置:

[transfer]
    fsckobjects = true

[fetch]
    fsckobjects = true

[receive]
    fsckobjects = true

这些验证克隆数据库中的所有对象都是有效且可访问的。

但是,我要查看的某些回购邮件有错误,例如oh-my-zsh

git clone https://github.com/robbyrussell/oh-my-zsh.git .oh-my-zsh 
Cloning into '.oh-my-zsh'...
remote: Counting objects: 15624, done.
error: object 2b7227859263b6aabcc28355b0b994995b7148b6: zeroPaddedFilemode: contains zero-padded file modes
fatal: Error in object
fatal: index-pack failed

有没有办法可以覆盖单个“git clone”操作的全局fsckobjects设置?

3 个答案:

答案 0 :(得分:9)

使用git clone --config key=value并传递您想要跳过的所有参数。对于oh-my-zsh,看起来像这样:

git clone --config transfer.fsckobjects=false \
    --config receive.fsckobjects=false \
    --config fetch.fsckobjects=false \
    git://github.com/robbyrussell/oh-my-zsh.git

答案 1 :(得分:1)

Git 2.19(2018年第三季度)现在可以克服该错误(转换为警告)。

可以通过git push配置变量来自定义在“ receive.fsck.*”接收端执行的防止不良对象进入存储库的测试。
现在,我们已经获得了在“ git fetch”方面执行相同操作的对手, fetch.fsck.*个配置变量。

请参见commit 8a6d052commit 65a836fcommit d786da1commit 1362df0commit 8b55b9dcommit 720dae5commit 456bab8,{{3} },commit b2558abcommit 5180dd2(2018年7月27日)由commit 95d9d4b
(由Ævar Arnfjörð Bjarmason (avar)Junio C Hamano -- gitster --中合并,2018年8月17日)

  

fetch:实施fetch.fsck.*

     

fetch.fsck.*的现有支持   receive.fsck.*。这样就可以用   特定问题而无需关闭fetch.fsckObjects

     

其中一个这样的存储库是commit f8ca718   使用克隆时,在此更改之前哪个将发出此错误   fetch.fsckObjects

error: object 2b7227859263b6aabcc28355b0b994995b7148b6: zeroPaddedFilemode: contains zero-padded file modes
fatal: Error in object
fatal: index-pack failed
     

现在使用 fetch.fsck.zeroPaddedFilemode=warn ,我们会对此进行警告   问题,但克隆将成功:

warning: object 2b7227859263b6aabcc28355b0b994995b7148b6: zeroPaddedFilemode: contains zero-padded file modes
warning: object a18c4d13c2a5fa2d4ecd5346c50e119b999b807d: zeroPaddedFilemode: contains zero-padded file modes
warning: object 84df066176c8da3fd59b13731a86d90f4f1e5c9d: zeroPaddedFilemode: contains zero-padded file modes
     

这样做的动机是能够跨一组计算机全局打开fetch.fsckObjects,但仍然可以通过将特定问题列入白名单或更好地将特定对象列入白名单而手动克隆各种旧版存储库。

答案 2 :(得分:0)

如果您只是需要最新版本 - 例如自动安装 - 我一直在我的脚本中使用它(参见例如install_ohmyzsh.sh#L70):

git clone --depth=1 https://github.com/robbyrussell/oh-my-zsh.git

它不会克隆整个仓库历史记录,只是最新版本,无论如何都应该可以自动安装。

(我很确定自己没有提出这个问题,但我无法将其追溯到原始来源。)