Игнорировать ошибки режима файлов fsck / zero-padded в "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
Есть ли способ переопределить мои глобальные настройки fsckobjects для одной операции "git clone"?
3 ответа
Использование 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 (Q3 2018) теперь позволит обойти эту ошибку (преобразуется как предупреждение).
Тест, выполненный на приемном конце git push
"для предотвращения попадания плохих объектов в хранилище можно настроить с помощью receive.fsck.*
переменные конфигурации.
Теперь у нас есть коллега, который делает то же самое на стороне "git fetch", с fetch.fsck.*
переменные конфигурации.
См. Коммит 8a6d052, коммит 65a836f, коммит d786da1, коммит 1362df0, коммит 8b55b9d, коммит 720dae5, коммит 456bab8, коммит b2558ab, коммит 5180dd2, коммит 95d9d4b (27 июля 2018 г.) от Ævar Arnfjörð Bjarmason ( avar
)
(Объединено Юнио С Хамано - gitster
- в комитете f8ca718, 17 августа 2018 г.)
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
в глобальном масштабе через парк компьютеров, но все еще в состоянии вручную клонировать различные устаревшие репозитории, либо занося в белый список конкретные проблемы, либо, что еще лучше, в конкретные объекты из белого списка.
Если вам просто нужна последняя версия - например, для автоматической установки - я использовал это в своих скриптах (см., Например, install_ohmyzsh.sh # L70):
git clone --depth=1 https://github.com/robbyrussell/oh-my-zsh.git
Он не клонирует всю историю репо, а только последнюю версию, которая в любом случае должна быть в порядке для автоматической установки.
(Я совершенно уверен, что сам не придумал это, но я не могу отследить его до первоисточника).