× К оглавлению На главную Об авторе

Дата и время публикации:    

Проблема и решение

1. Cуть проблемы

При попытке сохранения Git-репозитария firmware/linux-firmware.git в локальном хранилище git.server.local, как показано в дампе 1.1

Дамп 1.1

LANG=C git push --all new-origin
Enumerating objects: 15054, done.
Counting objects: 100% (15054/15054), done.
Delta compression using up to 4 threads
Compressing objects: 100% (5201/5201), done.
remote: error: object 087fbb748f50af6eac2248a445d25d666cc92c78: zeroPaddedFilemode: contains zero-padded file modes
remote: fatal: fsck error in packed object
error: remote unpack failed: index-pack abnormal exit
To git.server.local:firmware/linux-firmware.git
 ! [remote rejected] main -> main (unpacker error)
error: failed to push some refs to 'git.server.local:firmware/linux-firmware.git'

Был выявлен объект 087fbb748f50af6eac2248a445d25d666cc92c78 содержащий объекты в режиме дополнения файлов нулями (zero-padded file modes), который приводил к ошибки сохранения Git-репозитария firmware/linux-firmware.git в локальном хранилище [3.2].

2. Решение

2.1 Получение всех объектов и метаданных репозитария firmware/linux-firmware.git

Производится серией запросов Git, как показано в дампе 2.1.1

Дамп 2.1.1

git init firmware/linux-firmware.git && cd firmware/linux-firmware.git 
git remote add origin git://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git
git fetch --all --prune
git fetch --tags

2.2 Исправление объектов в режиме дополнения файлов нулями

Выполнить запрос git fsck на наличие ошибок в репозитарии firmware/linux-firmware.git, как показано в дампе 2.2.1

Дамп 2.2.1

git fsck
Проверка каталогов объектов: 100% (256/256), готово.
warning in tree ff42cbe9e62d5d3e383ca621028bd6554597d5f0: zeroPaddedFilemode: contains zero-padded file modes
warning in tree a1b6cee91e8ec2d6234662bae82e7311ddebcae4: zeroPaddedFilemode: contains zero-padded file modes
warning in tree f33530989ecad99fac4a5e9fa26fa80d01846594: zeroPaddedFilemode: contains zero-padded file modes
warning in tree 490909e4f0eccf5d3734b8800c52d6dbe967928e: zeroPaddedFilemode: contains zero-padded file modes
warning in tree 09de674843f61f482d93cd37cb93744c6f041051: zeroPaddedFilemode: contains zero-padded file modes
warning in tree 1d5d6b2f3fb29d29c2f1befa2bbfa04480f4116c: zeroPaddedFilemode: contains zero-padded file modes
warning in tree 9e915799fa70510fa6248a5e36440c007efe7edd: zeroPaddedFilemode: contains zero-padded file modes
…
warning in tree d796cc08fdcd4c2dc746851b40d6f8e8d14a97b9: zeroPaddedFilemode: contains zero-padded file modes
Проверка объектов: 100% (15091/15091), готово.

Которая выявила множество объектов в режиме дополнения файлов нулями.

Оставаясь в исходном репозитарии, создать новый — куда будет помещена восстановленная копия, как показано в дампе 2.2.2

Дамп 2.2.2

git init ../linux-firmware-repaired.git

выполнить запрос git fast-export, как показано в дампе 2.2.3

Дамп 2.2.3

git fast-export --all | (cd ~/repaired_repo && git fast-import) 
fatal: encountered signed tag 26e4a349e734d60f6e9f365708db06a11a53e77c; use --signed-tags= to handle it
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:      20000
Total objects:        15054 (       586 duplicates                  )
      blobs  :         7550 (         0 duplicates       3867 deltas of       7422 attempts)
      trees  :         4917 (       586 duplicates       4475 deltas of       4621 attempts)
      commits:         2587 (         0 duplicates          0 deltas of          0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of          0 attempts)
Total branches:          38 (        39 loads     )
      marks:        1048576 (     10137 unique    )
      atoms:           2881
Memory total:          3829 KiB
       pools:          2423 KiB
     objects:          1406 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize = 2146435072
pack_report: core.packedGitLimit      = 2146435072
pack_report: pack_used_ctr            =       2649
pack_report: pack_mmap_calls          =       1212
pack_report: pack_open_windows        =          1 /          1
pack_report: pack_mapped              =  864753226 /  864753226
---------------------------------------------------------------------

Если во время восстановления случилась ошибка осталось выполнить повторно с указанием метода переноса подписанных GPG тэгов, как показано в дампе 2.2.4

Дамп 2.2.4

git fast-export --signed-tags=strip --all | (cd ../linux-firmware-repaired.git && git fast-import)
Распаковка объектов: 100% (37/37), 5.20 КиБ | 532.00 КиБ/с, готово.
fast-import statistics:
---------------------------------------------------------------------
Alloc'd objects:      20000
Total objects:           37 (     15640 duplicates                  )
      blobs  :            0 (      7550 duplicates          0 deltas of          0 attempts)
      trees  :            0 (      5503 duplicates          0 deltas of          0 attempts)
      commits:            0 (      2587 duplicates          0 deltas of          0 attempts)
      tags   :           37 (         0 duplicates          0 deltas of          0 attempts)
Total branches:          38 (       311 loads     )
      marks:        1048576 (     10137 unique    )
      atoms:           2881
Memory total:          3829 KiB
       pools:          2423 KiB
     objects:          1406 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =       4096
pack_report: core.packedGitWindowSize = 2146435072
pack_report: core.packedGitLimit      = 2146435072
pack_report: pack_used_ctr            =       2679
pack_report: pack_mmap_calls          =          1
pack_report: pack_open_windows        =          1 /          1
pack_report: pack_mapped              =  864753226 /  864753226
---------------------------------------------------------------------

После чего, нужно настроить URL удаленного хранилища linux-firmware-repaired.git в хранилище реозитариев, как показано в дампе 2.2.5

Дамп 2.2.5

git remote add origin git@git.server.local:firmware/linux-firmware.git
git remote -v 
origin	git@git.server.local:firmware/linux-firmware.git (fetch)
origin	git@git.server.local:firmware/linux-firmware.git (push)

Выполнить сохранение объектов, как показано в дампе 2.2.6

Дамп 2.2.6

LANG=C git push --all origin
Enumerating objects: 15054, done.
Counting objects: 100% (15054/15054), done.
Delta compression using up to 4 threads
Compressing objects: 100% (6290/6290), done.
Writing objects: 100% (15054/15054), 824.69 MiB | 76.89 MiB/s, done.
Total 15054 (delta 8342), reused 15054 (delta 8342), pack-reused 0
remote: Определение изменений: 100% (8342/8342), готово.
To git.server.local:firmware/linux-firmware.git
 * [new branch]      main -> main   

и туда же тэги, как показано в дампе 2.2.7

Дамп 2.2.7

LANG=C git push --tags
Enumerating objects: 37, done.
Counting objects: 100% (37/37), done.
Delta compression using up to 4 threads
Compressing objects: 100% (37/37), done.
Writing objects: 100% (37/37), 5.22 KiB | 5.22 MiB/s, done.
Total 37 (delta 0), reused 0 (delta 0), pack-reused 0
To git.server.local:firmware/linux-firmware.git
 * [new tag]         20190312 -> 20190312
 * [new tag]         20190416 -> 20190416
 * [new tag]         20190514 -> 20190514
...

Библиография

3.1 Push to gitlab.com fails with zeroPaddedFilemode: contains zero-padded file modes

3.2 remote: fatal: fsck error in packed object when pushing oh-my-zsh repo to new remote

Сайт разработан в соответствии с рекомендациями консорциума W3C для языка разметки HTML5.

Об авторе можно прочитать здесь.

Copyright © 2015-2019 Андрей Ржавсков