remote: Counting objects: 3442754, done. remote: Compressing objects: 100% (515633/515633), done. remote: Total 3442754 (delta 2898137), reused 3442437 (delta 2897904) Receiving objects: 100% (3442754/3442754), 721.13 MiB | 246.00 KiB/s, done. error: inflate: data stream error (incorrect data check) fatal: serious inflate inconsistency fatal: index-pack failed buddy$
the downloaded data was no more after this process. Why this happens to me I dont know but when I look out my downloaded directory no sources was available.
How to recover the download data?
Coderji
7,6255 gold badges36 silver badges50 bronze badges
asked Mar 22, 2014 at 5:12
1
I have seen this issue when the machine from which the «repo sync» or «git pull» was done had very low memory. I have seen this multiple times and checking the memory it always had 0GB free memory. This also happened when the user machine’s OS was upgraded to Ubuntu 14.04 and had the same issue of memory being insufficient though memory was managed well with a previous OS version.
Running the same command from a more powerful machine worked or trying this from a different OS worked.
This is not an answer but i had seen this issue, so an observation and workaround if the issue is related to memory.
answered Oct 4, 2016 at 6:46
Senthil A KumarSenthil A Kumar
9,73815 gold badges42 silver badges55 bronze badges
3
Make sure you have that issue consistently and:
- if others have the same message, that can mean an issue on the repo hosting service on the remote side: for instance, GitHub had a DDoS attack yesterday (GitHub status messages).
1:04 UTC:
As a result of our ongoing DDoS mitigation, we’re experiencing high rates of packet loss from users in the Asia-Pacific region.
We’re working on reducing this disruption to service and will provide additional information when it becomes available.
- if it is only you, try and see of you can reproduce that with a different computer.
If it is the case, then it could be an issue with the repo content itself.
answered Mar 22, 2014 at 7:05
VonCVonC
1.2m508 gold badges4248 silver badges5069 bronze badges
Recently I encountered the same problem when cloning a git repository on an NFS share with a large git repository (>500MB).
If I ran the git clone
on the server (I.E. not over NFS) the errors went away.
Further testing identified that occasionally data was getting corrupted while being copied to the server via NFSv4.
After much debugging it turned out the issue was related to a buggy network driver corrupting TCP packets when segmentation and rx/tx checksumming was offloaded to the network interface card.
After disabling the segmentation and rx/tx checksum offload on the network interface card (following the instructions in the following blog post: How to solve ssh disconnect packet corrupt problems) the data corruption problems on the NFS share went away, as did my issues with git.
answered Mar 16, 2018 at 10:33
PicoutputClsPicoutputCls
1,30213 silver badges24 bronze badges
I was experiencing this same issue. For me none of the solutions above helped.
I ended up running a memory test (memtest86), and it turns out that 2 of my 4 memory sticks had memory faults. Removing the faulty sticks allowed me to clone the repo without issue (it was a large repo).
answered Nov 23, 2022 at 22:35
LaurenceLaurence
58.2k20 gold badges169 silver badges210 bronze badges
Содержание
- Как восстановить объекты Git, поврежденные сбоем жесткого диска?
- 7 ответов:
- git clone: inflate: data stream error (incorrect header check) #373
- Comments
- deflate error when using git #10
- 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.
Источник
сначала попробуйте выполнить следующие команды (при необходимости повторите их):
$ 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: не удается прочитать дерево