SORU
30 EKİM 2008, PERŞEMBE


Git deposu'tarihi çöken

Büyük bir geçmişi var, oldukça gıt bir projemiz var.

Proje, ikili kaynak dosyaları bir sürü vardı ve çok projeyi erken, bu şimdi etkin dış kaynak olarak kaldırılmıştır.

Ancak, bizim depo boyutunu >200MB (toplam ödeme şu anda ~20 MB) bu dosyaları daha önce işlenmiş olması nedeniyle.

Yapmak istediğimiz şey "depoyu daha sonra bir değişiklik yaratmış olduğu anlaşılmaktadır." tarihin çöküşü Örneğin

1-----2-----3-----4----- --- --- 
                   \       /
                     ----- --- --- 
  1. Depo yarattı
  2. İkili dosyaların büyük bir set eklendi
  3. İkili dosyaları kaldırılan büyük set
  4. Yeni tasarlanmış 'Başlangıç' deposu

Çok etkili bir noktadan önce proje tarihi kaybetmek istemiyoruz. Bu noktada tek bir dal var, birden fazla başlangıç ile başa çıkmak için çalışıyor vb puan ile sorun yok. Ancak tarihin tüm kaybetmek ve güncel sürümü ile yeni bir depo başlamak istemiyoruz.

Bu mümkündür, ya da şişirilmiş bir depo sonsuza kadar mahkum muyuz?

CEVAP
30 EKİM 2008, PERŞEMBE


İkili kabartmak kaldırmak ve geçmişi geri kalanına devam edebilirsiniz. Seni yeniden düzenlemek için izin verir Git ve 'kabak' sadece birleştirebilirsiniz önce tamamlar ve büyük ikili dosyaları Ekle / Kaldır bunu tamamlar. Eğer bu ekler başka bir tamamlama ve çıkarma yapmış olsaydı, bu her dosya ile ilgili bir şey daha çok daha kolay olacaktır.

$ git log --stat       # list all commits and commit messages

Bu ara bu ikili dosyalarınızı eklemek veya silmek ve SHA1s, 2bcdef say 3cdef3 not tamamlar.

O zaman repo tarihinin düzenlemek, etkileşimli seçeneği ile rebase -i komut, ana ikili eklediğiniz taahhüt ile başlayan kullanın. EDİTÖR $başlatacak ve tamamlar 2bcdef ile başlayan bir listesini göreceksiniz:

$ git rebase -i 2bcdef^    # generate a pick list of all commits starting with 2bcdef
# Rebasing zzzzzz onto yyyyyyy 
# 
# Commands: 
#  pick = use commit 
#  edit = use commit, but stop for amending 
#  squash = use commit, but meld into previous commit 
# 
# If you remove a line here THAT COMMIT WILL BE LOST.
#
pick 2bcdef   Add binary files and other edits
pick xxxxxx   Another change
  .
  .
pick 3cdef3   Remove binary files; link to them as external resources
  .
  .

Ekle 12* *ikinci hat olarak ve diyor listesinden pick 3cdef3 hangi satırı kaldırın. Şimdi sadece bu değişiklikleri olan ve bir ikili ekleyip silebilir taahhüt taahhüt taahhüt edilen birleştirecek interaktif eylemler rebase bir listesi var. O zaman tam size söyleyeceğim sırayla sonraki tamamlar, tüm yeniden

$ git rebase --continue

Bu bir veya iki dakika sürer.< / ^ br . Şimdi artık ikili gelecek olan bir repo var. Ama yine de, varsayılan olarak, Git fikrini değiştirebilirsin, böylece çöp toplama, önce çevresinde değişiklikler 30 günlük tutar çünkü yer zaman alır. Eğer onları şimdi kaldırmak istiyorsanız:

$ git reflog expire --expire=1.minute refs/heads/master
      #all deletions up to 1 minute  ago available to be garbage-collected
$ git fsck --unreachable      # lists all the blobs(files) that will be garbage-collected
$ git prune
$ git gc

Şimdi kabartmak kaldırdık ama geçmişi geri kalanı tuttu.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • DanceOn

    DanceOn

    6 Mayıs 2006
  • DragsterMC Gaming

    DragsterMC G

    30 HAZİRAN 2013
  • tinycammonitor

    tinycammonit

    14 Aralık 2010