Error inflate data stream error incorrect header check

I experienced a power failure yesterday evening while writing a commit message. When I booted the machine back up I couldn't complete the commit. I ran git reset, added back the changed files, and ...

I experienced a power failure yesterday evening while writing a commit message. When I booted the machine back up I couldn’t complete the commit. I ran git reset, added back the changed files, and tried again, and got this:

% git commit
error: inflate: data stream error (incorrect header check)
error: unable to unpack a94406345ac44982b00cf57b4b9660a35436637f header
fatal: a94406345ac44982b00cf57b4b9660a35436637f is not a valid object

git fsck reveals the following:

% git fsck --full
Checking object directories: 100% (256/256), done.
error: inflate: data stream error (incorrect header check)
error: unable to unpack 4346883490a0990e68db0187241abc1642765a73 header
error: inflate: data stream error (incorrect header check)
fatal: loose object 4346883490a0990e68db0187241abc1642765a73 (stored in .git/objects/43/46883490a0990e68db0187241abc1642765a73) is corrupt

I notice the messages are complaining about different objects.

I searched Stack Overflow and the Web and tried a few different things but to no avail.

  • I don’t have a recent backup copy.
  • Cloning the repository into another directory doesn’t help; the new repository exhibits the exact same problems.
  • git stash gives the same message as git commit. All the other git commands seem to work normally.

How can I tell what is wrong and fix it?

git log output (just the first few lines):

% git log --oneline --decorate --all |head -n 8
253b086 (HEAD, new_tokenize) Normalized tokenizer interface slightly
0f2425a (master) Added procs to eval layer
a4d4c22 Added procedures as a type
d1e15ad (tag: v0.10) Added `if' form with tail call semantics
f94a992 (tag: v0.9) Completed environments
031116e Fixed bug where # on a line by itself caused segfault
3d8b09f Added environments, define and set!
01cc624 Put symbol table implementation into types.c

This is a small personal project; I usually just work in (master), but I was doing an experiment at the time (new_tokenize). 253b086 was the last successful commit before the power failure.

Содержание

  1. Как восстановить объекты Git, поврежденные сбоем жесткого диска?
  2. 7 ответов:
  3. git clone: inflate: data stream error (incorrect header check) #373
  4. Comments
  5. deflate error when using git #10
  6. Comments

Как восстановить объекты Git, поврежденные сбоем жесткого диска?

у меня был сбой жесткого диска, который привел к повреждению некоторых файлов репозитория Git. При запуске git fsck —full Я получаю следующий вывод:

у меня есть резервные копии репозитория, но единственная резервная копия, которая включает файл пакета, уже повреждена. Поэтому я думаю, что мне нужно найти способ получить отдельные объекты из разных резервных копий и каким-то образом поручить Git создать новый пакет с только правильными объектами.

не могли бы вы дать мне подсказывает, как исправить мой репозиторий?

7 ответов:

в некоторых предыдущих резервных копиях ваши плохие объекты могут быть упакованы в разные файлы или еще могут быть свободными объектами. Так что ваши объекты могут быть восстановлены.

кажется, есть несколько плохих объектов в базе данных. Так что вы можете сделать это вручную.

из-за git hash-object , git mktree и git commit-tree не записывайте объекты, потому что они находятся в пакете, а затем начните делать это:

(ваши пакеты перемещаются из репозитория, и распаковал снова в нем; только хорошие объекты теперь находятся в базе данных)

вы можете сделать:

и проверьте тип объекта.

если тип blob: извлеките содержимое файла из предыдущих резервных копий (с git show или git cat-file или git unpack-file , потом git hash-object -w для перезаписи объекта в текущем репозитории.

если тип дерева: вы могли бы использовать git ls-tree для восстановления дерева из предыдущих резервных копий; затем git mktree to запишите его снова в текущем репозитории.

если тип commit: то же самое с git show , git cat-file и git commit-tree .

конечно, я бы сделал резервную копию вашей оригинальной рабочей копии перед началом этого процесса.

Banengusk ставил меня на правильный путь. Для получения дополнительной информации я хочу опубликовать шаги, которые я предпринял, чтобы исправить повреждение репозитория. Мне посчастливилось найти все необходимые объекты либо в старых пакетах, либо в резервных копиях репозитория.

сначала попробуйте выполнить следующие команды (при необходимости повторите их):

и тогда у вас все еще есть проблемы, попробуйте может:

удалите все поврежденные объекты, например

удалить все пустые объекты, например,

проверьте сообщение «сломанная ссылка»:

это будет говорит вам, какой файл коррумпированный blob пришел откуда?

чтобы восстановить файл, вам может очень повезти, и это может быть версия, которую вы уже проверили в своем рабочем дереве:

снова, и если он выводит отсутствующий SHA1 (4b945..) вы теперь все сделали!

предполагая, что это была какая-то более старая версия, которая была сломана, самый простой способ сделать это-сделать:

и что покажет вам весь журнал для этого файла (пожалуйста, поймите что дерево, которое у вас было, может быть не деревом верхнего уровня, поэтому вам нужно выяснить, в каком подкаталоге он был самостоятельно), то теперь вы можете снова воссоздать отсутствующий объект с помощью hash-object.

чтобы получить список всех ссылок с отсутствующими коммитами, деревьями или блобами:

возможно, невозможно удалить некоторые из этих ссылок с помощью обычных команд branch-d или tag-d, поскольку они умрут, если git заметит повреждение. Так что используйте сантехнику команда git update-ref-d $ref вместо этого. Обратите внимание, что в случае локальных ветвей эта команда может оставить устаревшую конфигурацию ветвей позади.git / config. Его можно удалить вручную (найдите раздел [branch «$ref»]).

после того, как все рефы чистые, есть все еще может быть нарушена совершает в reflog. Вы можете очистить все рефлоги с помощью Git reflog expire —expire=now —all. Если вы не хотите потерять все свои рефлоги, вы можете искать отдельные ссылки для сломанных reflogs:

(обратите внимание на добавленную опцию-g в Git rev-list.) Затем используйте git reflog expire —expire=now $ref на каждом из них. Когда все сломанные ссылки и рефлоги исчезли, запустите git fsck —full, чтобы проверить, что репозиторий чист. Висячие объекты в порядке.

ниже вы можете найти расширенное использование команд, которые потенциально могут привести к потере ваших данных в вашем репозитории git, если они не используются разумно, поэтому сделайте резервную копию раньше вы случайно делаете дальнейшие повреждения своему git. Попробуйте на свой страх и риск, если вы знаете, что делаете.

чтобы вытащить текущую ветвь поверх восходящей ветви после извлечения:

вы также можете попробовать проверить новую ветку и удалить старую:

чтобы найти поврежденный объект в git для удаления, выполните следующую команду:

для OSX, используйте sed -E вместо sed -r .

другая идея состоит в том, чтобы распаковать все объекты из файлов пакета, чтобы восстановить все объекты внутри .git / objects, поэтому попробуйте выполнить следующие команды в вашем репозитории:

если выше не помогает, вы можете попробовать rsync или скопировать объекты git из другого РЕПО, например

чтобы исправить сломанную ветку при попытке проверки следующим образом:

Попробуйте удалить его и загрузить из вверх по течению снова:

в случае, если git приведет вас в отстраненное состояние, проверьте master и слиться с ней в отдельной ветке.

другая идея состоит в том, чтобы перебазировать существующее мастер рекурсивно:

вот шаги, которые я следовал, чтобы восстановить из поврежденного объекта blob.

1) Определить коррумпированный blob

коррумпированный blob — это 241091723c324aed77b2d35f97a05e856b319efd

2) переместить поврежденный blob в безопасное место (на всякий случай)

3) получить родитель коррумпированного blob

родитель хэш —0716831e1a6c8d3e6b2b541d21c4748cc0ce7180.

4) получить соответствующее имя файла чтобы испортить blob

найдите этот конкретный файл в резервной копии или в вышестоящем репозитории git (в моем случае это свалка.смола.ГЗ). Затем скопируйте его где-нибудь в локальном репозитории.

5) Добавить ранее поврежденный файл в базу данных объектов git

git checkout может фактически выбрать отдельные файлы из ревизии. Просто дайте ему хэш фиксации и имя файла. Более подробная информация здесь.

Я думаю, что самый простой способ исправить это безопасно-вернуться к новейшей незафиксированной резервной копии, а затем выборочно выбрать неповрежденные файлы из новых коммитов. Удачи вам!

вот две функции, которые могут помочь, если ваша резервная копия повреждена или у вас есть несколько частично поврежденных резервных копий, а также (это может произойти, если вы резервное копирование поврежденных объектов).

запустите оба в репо, которое вы пытаетесь восстановить.

стандартное предупреждение: используйте только если вы действительно в отчаянии, и вы создали резервную копию своего (поврежденного) РЕПО. Это может ничего не решить, но по крайней мере должно подчеркнуть уровень коррупция.

Я решил эту проблему, чтобы добавить некоторые изменения, такие как git add-A и git commit снова.

Источник

git clone: inflate: data stream error (incorrect header check) #373

The text was updated successfully, but these errors were encountered:

Oddly enough git clone just seems to hang now with Version 1.0 (50).

ah yes I broke that, fix on the way

Confirmed v 1.0 (51) fixes the git clone not running. Thank you!

I’m getting this error when fetching on build 62 now. I was able to clone and pull a few times already but now I’m getting this error when pulling/fetching. One of the commits I’m fetching adds a bunch of new files (

30). Not sure if that has to do anything with it.

To add more details, the commit that broke it for me added a .svn directory to the repo. Having removed that commit on the remote everything is back to normal when pulling.

@JonasGessner I haven’t been able to fix this because I’ve never gotten it to happen to me. Any chance you’d be able to make a copy of the repo that has the problem available to me?

No I unfortunately can’t give you a copy of the repo. It might be worth a try to just add an svn repo to a git repo and try to clone it, this is what caused it to fail for me.

I just tried updating oh my zsh and got the same error. Maybe you can reproduce it by cloning that repo.

Hi same error here pulling one of my personal repository.
Ish 62 and git 2.22.2

If you want this bug to even be looked at, please post a url to a public failing repo so we can clone and replicate the problem.

No issues here, iSH 1.0 (62) + git 2.23

Still have the issue even after updating the alone Linux version to 3.11 so Git 2.34.

/etc/os-release still shows 3.10 but all softwares have been updated, so.

Here’s where the issue stands: it has never happened to me, and until I can get it to happen to me in a repeatable way, I won’t be able to fix it. Any details you can provide, such as a repository that consistently fails when you try to clone it, would be much appreciated.

@tbodt I deleted my local copy of repo and cloned it again and now it works again.

Maybe there was a bug but it probably has been fixed. Btw is it right to update the alpine Linux like any regular alpine Linux ? Because as I said the file os-release is not changed after the upgrade.

Thanks a lot in advance and for your great software it’s so amazing !

It seems the version of alpine in iSH is so minimal it doesn’t include /etc/os-release. But yeah that’s how you’re supposed to upgrade it.

Ok then subject is closed for me, thanks a lot again.

In case it helps debug further, here’s an oh-my-zsh install that fails with this error when running git pull . As others have said, moving it aside and creating a new clone of the repo with the latest iSH works fine.

Источник

deflate error when using git #10

I am rebasing a linux-stable tree with git and getting deflate failure with the current git master.

$ git pull —rebase
remote: Counting objects: 256, done.
remote: Compressing objects: 100% (39/39), done.
remote: Total 256 (delta 218), reused 254 (delta 217)
Receiving objects: 100% (256/256), 44.38 KiB | 0 bytes/s, done.
fatal: unable to deflate appended object (-5)
fatal: index-pack failed

The annoying thing is that when running this under gdb, it does not fail so there is definitely something fishy going on. Using vanilla zlib works just fine. It’s fairly easy to reproduce for me.

I am going to try debugging some of this but wanted to get it out there. Hopefully you guys have suggestions on what I can try.

The text was updated successfully, but these errors were encountered:

Thanks for reporting this. Looks like the -5 corresponds to a Z_BUF_ERROR. Is your tree publically available that I can investigate this further?

Git uses two configuration options to control the deflate compression level, core.loosecompression and pack.compression. The loosecompression defaults to level 1 and pack.compression defaults to level 6. You might be able to temporarily avoid this problem while I work to fix it by changing the git compression levels. If this works, let me know what option you had to change, and the working value. That’ll provide some additional insights.

Thanks and sorry for the inconvenience.

Unfortunately no, my tree is not public. I am trying to see if I can make it easy to reproduce by using a public tree.

I tried to change the parameters as you suggested. It was a bit of random walk

  • Set pack.compression to 1, no change
    -Then set core.compression to 1, no change
  • Then set core.compression to 5 and it worked

Then I started from a fresh clone and I verified that setting core.compression to 5 was enough

The common denominator there seems to be level 1. Could you verify that it doesn’t work when set to 1 and does when set to 2-9?

Yes, core.compression 2-9 works just fine. core.compression 1 fails

That’s interesting. I have similar errors reproducible with public git repositories. Cloning linux master repository fails.

Interesting. This seems to be caused by deflate_quick returning finish_started a bit too early. This happens when the output buffer is exhausted before all of the input is loaded. Then deflate() sees the user submitting more input after we’ve entered the FINISH_STATE, and returns an error.

I’ve pushed a new branch called «issue10.» Could you check whether this branch, specifically commit fa19b0b, fixes the issue?

I’ve just tried fa19b0b but while index-pack does not fail anymore, the resulting buffer seems to be corrupted:

error: inflate: data stream error (incorrect data check)
error: failed to read delta base object a210766279d380c550c8302725b9ab344a512417 at offset 4617837 from .git/objects/pack/pack-ecb1f703ea9732b91e3a423176aab38fc69514b1.pack
error: inflate: data stream error (incorrect data check)
error: failed to read delta base object b901371ca361a1e6eafa411f5b144f6e8866aa9c at offset 4836578 from .git/objects/pack/pack-ecb1f703ea9732b91e3a423176aab38fc69514b1.pack
error: inflate: data stream error (incorrect data check)
error: failed to read delta base object 6650df70bb35aa48320ed25d5573703be789ea18 at offset 5517189 from .git/objects/pack/pack-ecb1f703ea9732b91e3a423176aab38fc69514b1.pack
error: inflate: data stream error (incorrect data check)

@gemorin the original bug is about deflate, which seems to work correctly. The error you are seeing is a new one about inflate, no? If yes, then it’s a new/different bug to investigate. For my use case, I no longer see deflate errors from git and thus the «deflate error when using git» is fixed. Should we open a new issue about inflate error?

Hmm, I would assume that the errors are connected, don’t you think? If deflate corrupts the file, inflate will fail.

I’m going to assume that these are related until we determine otherwise.

I can’t seem to reproduce this. Would you be able to put together a reproducible test case?

I am trying but so far I can only reproduce it with a specific tree which I can’t make publicly available

Okay. Could you provide some system information (OS/kernel, compiler version, git version) to help me narrow my search?

Sure, it’s a debian 7.6 with a 3.14 kernel, gcc 4.7, git 2.0.1

CPU: Intel(R) Core(TM) i7-3820 CPU @ 3.60GHz

Ok, I managed to reproduce the issue by doing the following things:

$ git clone -b linux-3.13.y git://kernel.ubuntu.com/ubuntu/linux.git
$ cd linux
$ wget https://kernel.org/pub/linux/kernel/v3.x/patch-3.16.6.xz
$ xzcat patch-3.16.6.xz | patch -p1 —force
$ git commit -a
$ git remote remove origin
$ git remote add -t linux-3.17.y origin git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git
$ git pull —rebase

rebase failed because of untracked files, so I did:

$ git add -A
$ git commit -a
$ git pull —rebase

then I got the inflate error I mentioned before.

I think you can just do git add -A before the first commit. But I wanted to give you the exact steps I used.

Источник

Here’s a docker container that reproduces either this problem or something like it…except it only seems to reproduce on Linode VMs (I used Ubuntu 18.04), and works fine elsewhere. git-repro-standalone.tar.gz

Cloning into '/root/dotfiles2'...
remote: Enumerating objects: 437, done.
remote: Counting objects: 100% (437/437), done.
remote: Compressing objects: 100% (174/174), done.
remote: Total 437 (delta 256), reused 437 (delta 256)
Receiving objects: 100% (437/437), 78.14 KiB | 169.00 KiB/s, done.
Resolving deltas: 100% (256/256), done.
error: packfile /root/dotfiles2/.git/objects/pack/pack-3851fe41132df85631c7230112adb773561bbb36.pack does not match index
error: packfile /root/dotfiles2/.git/objects/pack/pack-3851fe41132df85631c7230112adb773561bbb36.pack does not match index
error: packfile /root/dotfiles2/.git/objects/pack/pack-3851fe41132df85631c7230112adb773561bbb36.pack does not match index
error: packfile /root/dotfiles2/.git/objects/pack/pack-3851fe41132df85631c7230112adb773561bbb36.pack does not match index
fatal: update_ref failed for ref 'HEAD': cannot update ref 'refs/heads/master': trying to write ref 'refs/heads/master' with nonexistent object 5bd43f8d8797089b7599e11ae1e2081f2738e1cd

сначала попробуйте выполнить следующие команды (при необходимости повторите их):

$ git fsck --full
$ git gc
$ git gc --prune=today
$ git fetch --all
$ git pull --rebase

и тогда у вас все еще есть проблемы, попробуйте может:

  • удалите все поврежденные объекты, например

    fatal: loose object 91c5...51e5 (stored in .git/objects/06/91c5...51e5) is corrupt
    $ rm -v .git/objects/06/91c5...51e5
    
  • удалить все пустые объекты, например,

    error: object file .git/objects/06/91c5...51e5 is empty
    $ find .git/objects/ -size 0 -exec rm -vf "{}" ;
    
  • проверьте сообщение «сломанная ссылка»:

    git ls-tree 2d9263c6d23595e7cb2a21e5ebbb53655278dff8
    

    это будет говорит вам, какой файл коррумпированный blob пришел откуда?

  • чтобы восстановить файл, вам может очень повезти, и это может быть версия, которую вы уже проверили в своем рабочем дереве:

    git hash-object -w my-magic-file
    

    снова, и если он выводит отсутствующий SHA1 (4b945..) вы теперь все сделали!

  • предполагая, что это была какая-то более старая версия, которая была сломана, самый простой способ сделать это-сделать:

    git log --raw --all --full-history -- subdirectory/my-magic-file
    

    и что покажет вам весь журнал для этого файла (пожалуйста, поймите что дерево, которое у вас было, может быть не деревом верхнего уровня, поэтому вам нужно выяснить, в каком подкаталоге он был самостоятельно), то теперь вы можете снова воссоздать отсутствующий объект с помощью hash-object.

  • чтобы получить список всех ссылок с отсутствующими коммитами, деревьями или блобами:

    $ git for-each-ref --format='%(refname)' | while read ref; do git rev-list --objects $ref >/dev/null || echo "in $ref"; done
    

    возможно, невозможно удалить некоторые из этих ссылок с помощью обычных команд branch-d или tag-d, поскольку они умрут, если git заметит повреждение. Так что используйте сантехнику команда git update-ref-d $ref вместо этого. Обратите внимание, что в случае локальных ветвей эта команда может оставить устаревшую конфигурацию ветвей позади.git / config. Его можно удалить вручную (найдите раздел [branch «$ref»]).

  • после того, как все рефы чистые, есть все еще может быть нарушена совершает в reflog. Вы можете очистить все рефлоги с помощью Git reflog expire —expire=now —all. Если вы не хотите потерять все свои рефлоги, вы можете искать отдельные ссылки для сломанных reflogs:

    $ (echo HEAD; git for-each-ref --format='%(refname)') | while read ref; do git rev-list -g --objects $ref >/dev/null || echo "in $ref"; done
    

    (обратите внимание на добавленную опцию-g в Git rev-list.) Затем используйте git reflog expire —expire=now $ref на каждом из них.
    Когда все сломанные ссылки и рефлоги исчезли, запустите git fsck —full, чтобы проверить, что репозиторий чист. Висячие объекты в порядке.


ниже вы можете найти расширенное использование команд, которые потенциально могут привести к потере ваших данных в вашем репозитории git, если они не используются разумно, поэтому сделайте резервную копию раньше вы случайно делаете дальнейшие повреждения своему git. Попробуйте на свой страх и риск, если вы знаете, что делаете.


чтобы вытащить текущую ветвь поверх восходящей ветви после извлечения:

$ git pull --rebase

вы также можете попробовать проверить новую ветку и удалить старую:

$ git checkout -b new_master origin/master

чтобы найти поврежденный объект в git для удаления, выполните следующую команду:

while [ true ]; do f=`git fsck --full 2>&1|awk '{print }'|sed -r 's/(^..)(.*)/objects///'`; if [ ! -f "$f" ]; then break; fi; echo delete $f; rm -f "$f"; done

для OSX, используйте sed -E вместо sed -r.


другая идея состоит в том, чтобы распаковать все объекты из файлов пакета, чтобы восстановить все объекты внутри .git / objects, поэтому попробуйте выполнить следующие команды в вашем репозитории:

$ cp -fr .git/objects/pack .git/objects/pack.bak
$ for i in .git/objects/pack.bak/*.pack; do git unpack-objects -r < $i; done
$ rm -frv .git/objects/pack.bak

если выше не помогает, вы можете попробовать rsync или скопировать объекты git из другого РЕПО, например

$ rsync -varu git_server:/path/to/git/.git local_git_repo/
$ rsync -varu /local/path/to/other-working/git/.git local_git_repo/
$ cp -frv ../other_repo/.git/objects .git/objects

чтобы исправить сломанную ветку при попытке проверки следующим образом:

$ git checkout -f master
fatal: unable to read tree 5ace24d474a9535ddd5e6a6c6a1ef480aecf2625

Попробуйте удалить его и загрузить из вверх по течению снова:

$ git branch -D master
$ git checkout -b master github/master

в случае, если git приведет вас в отстраненное состояние, проверьте master и слиться с ней в отдельной ветке.


другая идея состоит в том, чтобы перебазировать существующее мастер рекурсивно:

$ git reset HEAD --hard
$ git rebase -s recursive -X theirs origin/master

Читайте также:

  • некоторые трюки для восстановления объектов blob, чтобы исправить поврежденный репозиторий.
  • как исправить сломанный хранилище?
  • Как удалить все сломанные ссылки из репозитория?
  • как исправить поврежденный репозиторий git? (seeques)
  • как исправить поврежденный репозиторий git? (qnundrum)
  • ошибка при использовании SourceTree с Git: ‘Summary’ failed with code 128: fatal: не удается прочитать дерево
  • Восстановить Поврежденный Git Голый Репозиторий
  • восстановление поврежденного репозитория git
  • как исправить ошибку git: объект empy / поврежден
  • как диагностировать и исправить git fatal: невозможно прочитать дерево
  • как справиться с этой ошибкой git
  • как исправить поврежденный репозиторий git?
  • как мне «перезаписать», а не «объединить» ветку на другой ветке в гите?
  • как заменить главную ветвь в git, полностью, из другой ветви?
  • Git: «коррумпированный свободный объект»
  • git reset = fatal: не удается прочитать дерево

Вчера вечером я испытал отказ от питания при написании сообщения о фиксации. Когда я загрузил машину, я не смог выполнить коммит. Я запустил git reset, добавил обратно измененные файлы и попытался снова, и получил следующее:

% git commit
error: inflate: data stream error (incorrect header check)
error: unable to unpack a94406345ac44982b00cf57b4b9660a35436637f header
fatal: a94406345ac44982b00cf57b4b9660a35436637f is not a valid object

git fsck показывает следующее:

% git fsck --full
Checking object directories: 100% (256/256), done.
error: inflate: data stream error (incorrect header check)
error: unable to unpack 4346883490a0990e68db0187241abc1642765a73 header
error: inflate: data stream error (incorrect header check)
fatal: loose object 4346883490a0990e68db0187241abc1642765a73 (stored in .git/objects/43/46883490a0990e68db0187241abc1642765a73) is corrupt

Я замечаю, что сообщения жалуются на разные объекты.

Я искал SO и Web и пробовал несколько разных вещей, но безрезультатно.

  • У меня нет последней резервной копии.
  • Клонирование репозитория в другой каталог не помогает; в новом репозитории имеются те же проблемы.
  • git stash дает то же сообщение, что и git commit. Все остальные команды git работают нормально.

Как я могу сказать, что не так и исправить?

Изменить: git log вывод как предлагается (только первые несколько строк):

% git log --oneline --decorate --all |head -n 8
253b086 (HEAD, new_tokenize) Normalized tokenizer interface slightly
0f2425a (master) Added procs to eval layer
a4d4c22 Added procedures as a type
d1e15ad (tag: v0.10) Added `if' form with tail call semantics
f94a992 (tag: v0.9) Completed environments
031116e Fixed bug where # on a line by itself caused segfault
3d8b09f Added environments, define and set!
01cc624 Put symbol table implementation into types.c

Это небольшой персональный проект; Обычно я просто работаю (мастер), но в то время я экспериментировал (new_tokenize). 253b086 был последним успешным фиксацией перед сбоем питания.

4b9b3361

Ответ 1

Похоже, что git создал файлы в .git/objects для нового коммита, но не смог их успешно записать. Я решил это, удалив их по одному и перезапустив git fsck --full, чтобы найти следующий. Я начал с того, что изначально сообщалось git fsck:

% rm -f .git/objects/43/46883490a0990e68db0187241abc1642765a73
% git fsck --full
Checking object directories: 100% (256/256), done.
error: inflate: data stream error (incorrect header check)
error: unable to unpack 86e7247af5865e857a3b61eed99986e2d9538df1 header
error: inflate: data stream error (incorrect header check)
fatal: loose object 86e7247af5865e857a3b61eed99986e2d9538df1 (stored in .git/objects/86/e7247af5865e857a3b61eed99986e2d9538df1) is corrupt
% rm -f .git/objects/86/e7247af5865e857a3b61eed99986e2d9538df1
% git fsck --full
Checking object directories: 100% (256/256), done.
error: inflate: data stream error (incorrect header check)
error: unable to unpack a94406345ac44982b00cf57b4b9660a35436637f header
error: inflate: data stream error (incorrect header check)
fatal: loose object a94406345ac44982b00cf57b4b9660a35436637f (stored in .git/objects/a9/4406345ac44982b00cf57b4b9660a35436637f) is corrupt

И так далее. Я удалил пять объектов до того, как git fsck появился чистым, соответствующим (как я полагаю) пяти файлам в комманде, который я пытался сделать. Я предполагаю, что история файла не была повреждена вообще.

Кстати, я думал о другом методе, который, похоже, тоже работает. git clone копирует плохие объекты, но git push нет. После создания резервной копии я создал новый пустой репозиторий (-bare, потому что в противном случае вы не можете нажать на master), а затем не выполнил мои изменения и переместил обе ветки в новый репозиторий. Тогда это просто вопрос проверки и восстановление последних изменений из моих резервных копий.

По-прежнему интересно, если кто-то хочет пролить свет на механизм сбоев здесь.

Ответ 2

Простой ответ на этот вопрос для тех, кто сталкивается с этой проблемой: команда git clone — это исправление, если у вас есть удаленное репо, затем клонируйте его в локальную папку (после удаления поврежденного локального репо), если у вас нет удаленное репо, тогда попробуйте нажать коррумпированное репо на github и затем клонировать его оттуда, я думаю, что поврежденные объекты не будут нажаты, и он устранит проблему.

Ответ 3

Как описано в этом ответе, я побежал:

git reflog expire --expire-unreachable=now --all
git gc --prune=now

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

Это было намного быстрее, чем отслеживать их один за другим!

Мы самостоятельно размещаем наш git, сначала на сервере Bonobo git, теперь на gitea.

Неоднократно мы получали ошибку при попытке клонировать наше основное репо (папка .git размером 2,2 ГБ):

error: inflate: data stream error (incorrect data check)
fatal: pack has bad object at offset: ...
fatal: index-pack failed

Ошибка иногда также возникала при использовании git-fsck, но на этот раз этого не произошло. Мы всегда находили время, чтобы исправить эту ошибку, но менее чем через неделю возникает другая ошибка.

Что может вызвать эту проблему и как ее исправить? Сервер, на котором размещен git, в остальном работает стабильно, на нем размещается наш DC, множество других программ и веб-сайты (табло, календари, сайты интрасети …). Должны ли мы искать проблему на стороне сервера или это будет проблема с каким-то клиентом git? У нас нет стандартизированного клиента git, некоторые используют git для окон, некоторые визуальные студии, некоторые черепахи git.

2 ответа

Лучший ответ

Если эта проблема возникает, это может быть связано с отказом диска или модуля памяти на компьютере, на котором размещено программное обеспечение сервера git. В нашем случае тестирование с помощью «memtest» показало, что по крайней мере один из модулей ОЗУ ECC был достаточно неисправен, чтобы перевернуть биты.


0

Alexander
16 Янв 2020 в 15:16

В моем случае я получил ту же ошибку, и это было связано с нехваткой дискового пространства на машине, на которую я пытался клонировать. Как только я освободил место на диске, я смог клонировать репо.


0

Pelonomi Moiloa
16 Янв 2020 в 14:35

Понравилась статья? Поделить с друзьями:
  • Error indirection requires pointer operand int invalid
  • Error indexing must appear last in an index expression
  • Error index was outside the bounds of the array
  • Error index row requires bytes maximum size is 8191
  • Error incorrect verification number entered