Dosya Git deposundan temizlenemedi, yeni yedekleme oluşturulamadı


116

Uzak depomdan bir dosyayı çalıştırarak kaldırmaya çalıştım:

git filter-branch --index-filter 'git rm --cached --ignore-unmatch Rakefile' HEAD

Ama Git bundan şikayet ediyor

Yeni yedek oluşturulamaz.
-F
rm ile yedeklemenin üzerine yazmayı zorla refs / original / Force içinde önceki bir yedekleme zaten mevcut : /.git-rewrite/backup-refs kaldırılamıyor: İzin reddedildi
rm: dizin kaldırılamıyor /.git-rewrite: Dizin boş değil

Bu, Windows'ta .git-rewrite dizinini silmemden sonraydı.

Bu dosyayı nasıl kaldırabilirim? Depomda oturan 29Mb'lik bir dosya, bu yüzden dosyayı kaldırmam gerekiyor.

Taahhüdü silmeye çalıştım git rebase -i, ama görünüşe göre commit birçok farklı dosyaya dokunduğu için Git çatışmalardan şikayet ediyor ve güvenli olmak için iptal ettim.


1
Arama motorları için: Bu, hata mesajınız olduğunda da geçerli olabilir .git-rewrite already exists, please remove it.
— Drew Noakes

Yanıtlar:


219

Zaten bir filtre dallanma işlemi gerçekleştirdiniz. Filtre dalından sonra Git, bir şeyler ters giderse diye etrafındaki eski işlemlere referanslar tutar.

Bunları içinde bulabilirsiniz .git/refs/original/…. Ya bu dizini ve içindeki tüm dosyaları silin ya da -fGit'i eski referansları silmeye zorlamak için bayrağı kullanın.

git filter-branch -f \
--index-filter 'git rm --cached --ignore-unmatch Rakefile' HEAD

10
Sonunda işe yaradı, teşekkürler! -F bayrağını denedim ama sorun onu komutun sonuna koymamdı örneğin. KAFA -f. Emrinizi görmek, bayrağı başlangıçta koymamı sağladı ve işe yaradı! = D
— Cardin

12
seçenek bayrakları ( -f) refs ( HEAD) 'den önce gider . hakemler son gider
— knittl

-F ekledikten VE dizini sildikten sonra hala aynı hatayı alıyorum. Herhangi bir fikir?
— Yaron

1
@knittl, bahsetmiyordum git add. .git/refs/original/Klasörü sildikten ve komuttaki -fbayrağı kullandıktan sonra bile orijinal posterle aynı hatayı alıyordum git filter-branch. Benim durumumda çözüm, .git/packed-refsdosyayı silmekti .
— Yaron

1
@knittl, nasıl düzelteceğimi buldum ama sorunun ne olduğunu bulamadım. Temel olarak, --ignore-unmatchkomuta ekledim git rmve sorunsuz geçti!
— Gabrielius

21

Orijinal yedeklemeyi kaldırmak için bu komutu kullanın:

git update-ref -d refs/original/refs/heads/master

Git depomu filtrelemek için kullandığım temel bilgiler: https://gist.github.com/k06a/25a0214c98bc19fd6817


Yedeği kaldırmak için doğru çözüm budur! Silme .git/refs/original/sorunu çözmez.
— Erik Koopmans

Düzeltmeye çalıştığınız dalda 'ana' kelimesini değiştirdiğinizden emin olun .. benim durumumda 'geliştir'
— Damian Green

git show-ref | awk '/ refs.original.refs/{print$2}'deponuzun sahip olduğu tüm yedekleri bulmak için.
— Dan

4

Aynı sorunu yaşadım ve yukarıdaki cevap onu çözmedi. .Git / refs / original / dizini kalmamıştı. Benim için çözüm, .git / packed-refs dosyasını silmekti.


Aynı sorun. .git/packed-refsAncak dosya yok ve originaliçinde klasör yok .git/refs. Kimse?
— XedinUnknown

Burada-r komuta bayrak eklenerek çözüldü .
— XedinUnknown

Burada da aynı problem. Paketlenmiş referansları silmek sorunu çözdü, ancak aynı zamanda git dizinimin geri kalanını da mahvetti ve yedekten geri yüklemek zorunda kaldım.
— Kevin Yin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.