忽略 fsck/零填充文件模式错误 "git clone"



我的全局 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 克隆"操作的全局 fsckobjects 设置?

使用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

Git 2.19(2018 年第 3 季度)现在允许克服该错误(转换为警告)。

在"git push"的接收端执行的测试,以防止坏对象进入仓库,可以通过receive.fsck.*配置变量进行自定义。
我们现在获得了一个在"git fetch"方面做同样的事情的对应物,与fetch.fsck.*配置变量。

请参阅提交 8a6d052、提交65a836f、提交 d786da1、提交 1362df0、提交 8b55b9d、提交 720dae5、提交 456bab8、提交 b2558ab、提交 5180dd2、提交 95d9d4b (2018 年 7 月 27 日),作者 Ævar Arnfjörð Bjarmason (avar)。
(由Junio C Hamano --gitster-- 在提交f8ca718中合并,2018年8月17日)

fetch:实施fetch.fsck.*

实现fetch.fsck.*对与现有receive.fsck.*.这允许学究地克隆存储库 不关闭fetch.fsckObjects的特定问题。

一个这样的存储库是 https://github.com/robbyrussell/oh-my-zsh.git 在此更改之前,克隆时会发出此错误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,但仍然能够通过将特定问题列入白名单或更好地将特定对象列入白名单来手动克隆各种旧存储库。

如果您只需要最新版本(例如自动安装),我一直在我的脚本中使用它(例如):

git clone --depth 1 https://github.com/ohmyzsh/ohmyzsh

它不会克隆整个存储库历史记录,只会克隆最新版本,这对于自动安装来说应该是可以的。

(我很确定这不是我自己想出来的,但我无法追溯到原始来源)。

相关内容

  • 没有找到相关文章

最新更新