我的全局 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
它不会克隆整个存储库历史记录,只会克隆最新版本,这对于自动安装来说应该是可以的。
(我很确定这不是我自己想出来的,但我无法追溯到原始来源)。