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----- --- ---
\ /
----- --- ---
- Depo yarattı
- İkili dosyaların büyük bir set eklendi
- İkili dosyaları kaldırılan büyük set
- 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
İ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.
Tamamen dosyasından kaldırın Git depos...
Yerel dosya sistemi üzerinde Gradle de...
Nasıl bir git deposundan eski tarihi k...
Klasörü ve içindekileri çıkartın git/G...
Nasıl Git deposu tarih commit/kaldırma...