SORU
29 Ocak 2010, Cuma


Git deposu dosyası (tarih)Kaldır

(soru vücudun alt) çözüldü
Şimdiye kadar ne ben bunu uzun zamandır arıyorum şimdi

Hemen hemen aynı yöntem, ama ikisi de pack dosyaları... Sıkışmış nesneleri bırakın.
Ben ne çalıştı:

git filter-branch --index-filter 'git rm --cached --ignore-unmatch file_name'
rm -Rf .git/refs/original
rm -Rf .git/logs/
git gc

Hala pack dosyaları var, ve bunu biliyorum

git verify-pack -v .git/objects/pack/pack-3f8c0...bb.idx | sort -k 3 -n | tail -3

Ve bu:

git filter-branch --index-filter "git rm -rf --cached --ignore-unmatch file_name" HEAD
rm -rf .git/refs/original/ && git reflog expire --all &&  git gc --aggressive --prune

Aynı...

git clone hile denedim, dosyaları (~3000) bazıları kaldırıldı ama büyük dosyalar hala orada...

Ben depoyu, 200M~, ve ben gerçekten onları orada istemiyor... Ve depo sıfırlamak istemiyorum 0: büyük bazı eski dosyaları(

ÇÖZÜM: Bu dosyaları kurtulmak için en kısa yol

  1. kontrol edin .gıt/-Evet, çok dolu benim sorunum uzaktaki bir depo için refs/remotes/origin/master orada bir çizgi vardı, silin, aksi halde git bu dosyaları kaldırmaz
  2. (isteğe bağlı)git verify-pack -v .git/objects/pack/#{pack-name}.idx | sort -k 3 -n | tail -5 en büyük dosyaları kontrol etmek için
  3. (isteğe bağlı)git rev-list --objects --all | grep a0d770a97ff0fac0be1d777b32cc67fe69eb9a98 - bu dosyaları kontrol etmek için
  4. git filter-branch --index-filter 'git rm --cached --ignore-unmatch file_names' - tüm değişiklikleri bir dosyayı kaldırmak için
  5. rm -rf .git/refs/original/ - gıt yedekleme kaldırmak için
  6. git reflog expire --all --expire='0 days' - tüm gevşek nesneleri sona erecek
  7. git fsck --full --unreachable - eğer herhangi bir gevşek nesneler olup olmadığını kontrol etmek için
  8. git repack -A -d - eşyalarımı topluyordum
  9. git prune - son olarak bu nesneleri kaldırmak için

CEVAP
1 ŞUBAT 2010, PAZARTESİ


Depo veri erişimi olmadan kesin bir şey söyleyemem, ama muhtemelen dolu başvuruları hala eski başvuru git filter-branch çalıştırılmadan önce işleyen bir veya daha fazla olduğuna inanıyorum. Bu reflog süresi (ambalajsız) orijinal hakemler kaldırdık bile git fsck --full --unreachable büyük damla ulaşılamaz bir nesne aramıyor nedenini açıklıyor.

Burada yapmak istediğim bu git filter-branch git gc yaptıktan sonra ():

1) Orijinal başvuruları gitmiş olduğundan emin Olun:

rm -rf .git/refs/original

2) tüm reflog girdileri Süresi:

git reflog expire --all --expire='0 days'

3) eski dolu başvuruları için Kontrol edin

Bu zor, ne kadar bağlı ... ... yol açabilir. Bu otomatik olarak herhangi Gıt komutları bilmiyorum, bu elle yapmak zorunda kalacağız sanırım. .git/packed-refs bir yedeğini alın. Şimdi .git/packed-refs Düzenle. Eski hakemler için (özellikle, eğer .git/refs/original hakemler herhangi bir dolu olmadığını denetleyin. Eğer orada olmasına gerek yok, herhangi bir eski olanları bulursanız, onları (ref satırını kaldırın) silin.

packed-refs dosya temizliği bitirdikten sonra, git fsck ulaşılmaz nesneleri fark olmadığını görmek:

git fsck --full --unreachable

O çalıştı, ve git fsck şimdi ulaşılamaz olarak büyük blob rapor ederse, bir sonraki adıma geçmek.

4) dolu arşiv(ler) Temizleyebilirsiniz

git repack -A -d

Ulaşılmaz nesneleri çıkartın sağlayacaktır bukalpaketten.

5) (ulaşılamaz) gevşek nesneleri Budamak

git prune

Hepsi bu olsa gerek. Git gerçekten dolu başvuruları yönetmek için daha iyi bir yol olmalı. Belki benim bilmediğim daha iyi bir yolu yoktur. Daha iyi bir yol olmaması, packed-refs dosyasını el ile düzenlemek gitmek için tek yol olabilir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • EEVblog

    EEVblog

    4 NİSAN 2009
  • Munchkin the Teddy Bear

    Munchkin the

    30 EYLÜL 2011
  • NLthomas21

    NLthomas21

    20 Mayıs 2008