2010-11-18 2 views
8

Yerel makinemde bir git deposuyla büyük sorun yaşıyorum.Corrupted git ağacı?

Bir dosyayı değiştirdim, git status koştu ve dosya değiştirilmiş olarak göründü. Dosyayı git add . kullanarak ekledim ve her zamanki gibi çalıştı. i değişiklikleri işlemek üzereyken Ama ben şu hata var: git cat-file -t e91ce852822d32e380ed7ddd04c93066e3c600ea çalıştırarak

error: garbage at end of loose object 'e91ce852822d32e380ed7ddd04c93066e3c600ea' 
fatal: object e91ce852822d32e380ed7ddd04c93066e3c600ea is corrupted 

i nesne bir ağaç olduğunu görebiliriz.

Bozuk bir blob veya işlemin nasıl onarılacağı konusunda birkaç çözüm gördüm, ancak bu bir ağaç ve neyin yanlış gittiğine veya nasıl düzeltileceğine dair bir yanıt bulamıyorum.

Herhangi bir yardım söylemek zor yanlış olduğunu gitmiş olabilir ne

+2

'git fsck' çalıştırıyor musunuz? –

+0

Evet, aynı hata. Ancak başka bir nesne, bu da bir ağaç. –

+0

@MarkRushakoff: Sadece Olof ile aynı hatayı aldım ve 'git fsck' sadece aynı hata mesajını veriyor. –

cevap

2

:) takdir ve Git sürümüne ve ortama bağlıdır.
Örneğin, eski günlerde, legacyheaders = false ayarlarından dolayı bu tür bir iletiyi tetikleyen bir zlib issue with git1.5.1 vardı.

loose objects bir ağaç geri gelince, bu SO " How to recover Git objects damaged by hard disk failure?" bundan sonra, ( Mark Rushakoff açıklamada bahseder gibi) git fsck --full yapılmıştır bunu yapmanın bir yolunu göstermektedir cevap.
git cat-file -t 6c8cae4994b5ec7891ccb1527d30634997a978ee 

and check the type of the object.

If the type is tree: you could use 'git ls-tree' to recover the tree from previous backups; then ' git mktree ' to write it again in your current repository.

Ama bu yaşlı paketlerde veya depo yedeklemeler ya bu nesneleri bulma varsayalım.

+0

Bu soruya dayandı, ancak .git/object/pack/empty. Eski paketlerde nasıl arama yapabilirim? –

+0

@Olof: eski paketler? Son cümlenin burada olduğuna inanıyorum "Ama bu nesneleri ya eski paketlerde ya da depo yedeklerinde buluyoruz" geliyor. Herhangi bir yedeğiniz var mı? – VonC

+0

Bir yedeğim var ama maalesef yaklaşık bir aylık. Onları eski paketlerde nasıl bulurum? Daha eski bir işlemi kontrol edemiyorum, işe yarayacak tek şey git log. –

-2

Günaydın, benim için, git dizini sildim ve yeniden init git. herhangi bir çözüm işe yaramadı eğer git repo harici ressource (Github) ve ile senkronize edilirse

+0

Yani '.git' dizini kaldırmak mı istiyorsunuz? o zaman ... git init değil sanırım? –

3

, kendi Repo-init yeniden yapabilirsiniz

yaptıklarım:

# copy the corrupted .git dir 
mv -f .git .gitback 
git init 
# keep your config file 
cp .gitback/config .git/config 
# load objects 
git pull 

Çalıştı. Açıkçası, bu harika bir çözüm değil, ama yardımcı olabilir

+0

bazen, yapabileceğiniz tek şey budur. Yine de harika bir çözüm değil ve sadece solo projelerde sadece kabul edilebilir :) –