"Git gui" çalıştırılırken "Gevşek Nesne" açılır penceresini atlama


123

'Git gui'yi çalıştırdığımda yazan bir açılır pencere görüyorum

Bu depoda şu anda yaklaşık 1500 gevşek nesne var.

Daha sonra veritabanının sıkıştırılmasını önerir. Bunu daha önce yaptım ve gevşek nesneleri yaklaşık 250'ye düşürdü, ancak bu pop-up'ı engellemiyor. Yeniden sıkıştırmak, gevşek nesnelerin sayısını değiştirmez.

Mevcut iş akışımız, Perforce'dan geçiş yaparken önemli ölçüde 'yeniden taban' kullanımını gerektiriyor ve Perforce hala standart SCM'dir. Git, kanonik SCM olduğunda, düzenli birleştirmeler yapacağız ve gevşek nesneler sorunu büyük ölçüde azaltılmalıdır.

Bu arada, bu 'yararlı' açılır pencereyi gerçekten kapatmayı çok isterim.


1
Bu diyalog, birçok insanın var olmamasını isteyeceği bir "özellik" için harika bir örnektir. Yalnızca can sıkıcı değil, donanımdan sıfırlamadan sonra ayrılan önemli taahhütleri de silebilir.
adelriosantiago

Yanıtlar:


169

Henüz kimsenin bir cevabı olmadığından, o diyaloğu gösteren kodu nasıl kaldıracağımı görmek için koda baktım. Bunu yapan hint_gcprosedürü ve çağrıldığı yeri buldum . Aynı zamanda 2011 sonlarında iletişim kutusunu devre dışı bırakmak için bir yapılandırma seçeneği eklendiğini fark ettim . Bu değişiklik (git-gui 0.16.0'ın bir parçası) 2011-12-14'te Git'in ana hattına birleştirildi .

Dolayısıyla, Git v1.7.9 veya daha yenisini kullanıyorsanız, aşağıdaki komutla uyarı iletişim kutusunu devre dışı bırakabilirsiniz:

git config --global gui.gcwarning false

Daha eski bir sürüm kullanıyorsanız /lib/git-core/git-gui, after 1000 hint_gcsatırı düzenleyip /usr/share/git-gui/lib/database.tclkaldırabilir veya hint_gcprosedürün gövdesini düzenleyip kaldırabilirsiniz . (Bu dosya yolları Cygwin'dedir - diğer ortamlarda dosyalar farklı konumlarda olabilir. Windows için öyledir c:\Program Files\Git\mingw64\libexec\git-core\git-gui.tcl)


3
Gevşek nesnelerden after 1000 hint_gcsonra uyarı olması için artırabilir miyiz 10000?
sashoalm

@sashoalm Kabul ediyorum. Bir sebepten dolayı orada.
HankCa

İyi nedenlerin tam olarak ne olduğunu merak ederek, bu diyalog çok acı verici, iyi nedenler açıkça açıklanmadan, yukarıdaki komutta kesinlikle çok cazip geliyorum.
Josh Mc

2
@sashoalm: Belki de bunu kastediyorsunuz, ancak "1000" after 1000diyalog gösterilinceye kadar beklenecek milisaniye sayısını ifade ediyor. "10000" e yükselttiğinizde, iletişim kutusu görünmeye devam edecek, ancak bunun yerine 10 saniye sürecektir.
fuglede

1
Ancak @ NickDandoulakis'in cevabında belirtildiği gibi database.tcl, limitin tanımını içerir ve diyaloğu daha az sıklıkta yapmak için artırılabilir.
fuglede

50

Güncelleme: git prunebu gevşek nesneleri kaldıracağı için sorunu "çözer"
( varsayılan olarak yalnızca iki haftadan daha eski gevşek nesneler için git gcçağrılar git prune).
Ancak OP Michael Donohue'un yorumlarda belirttiği gibi:

Gevşek nesneleri iki hafta boyunca ortalıkta tutmanın güvenlik yönünü seviyorum, geri dönüp bazı eski revizyonlara bakmak istersem, bu çözümü gerçekten sevmiyorum.
Git'in boyutu veya performansıyla ilgili herhangi bir sorun yaşamıyorum, sadece 'git gui', veritabanını sıkıştırmanın hiçbir etkisi olmasa bile veritabanını sıkıştırmamı istemekte ısrar ediyor.


Orijinal cevap:

" git gc" Tüm gevşek nesnelerin kaldırılamaması sorunu daha önce bildirilmişti (2008 sonlarında, " " git gc"artık gevşek nesneleri kaldırmıyor gibi görünüyor "

git gcsadece iki haftadan daha eski olan gevşek nesneleri kaldırır, eğer gerçekten şimdi kaldırmak istiyorsanız git prune çalıştırın.
Ancak çalıştırdığınızda başka hiçbir git işleminin etkin olmadığından emin olun, aksi takdirde bir şeye basılabilir.

" git gc" Olacaktır paketten ulaşılamaz hale gelir ve paketler şu anda edildi nesneleri.
Sonuç olarak, bir git depo tarafından kullanılan disk alanı miktarı aslında gidebilir kadar bir "sonra dramatik git gckendi dosya sistemi üzerinde tam yakın çalışan birisinin şaşırtıcı olabilir" operasyonunda, bir izleme deposundan şube bir dizi siler ve sonra bir " git gc" çok tatsız bir sürpriz yapabilir.

[Örnek: ]Eski dallar gibi bir etiketle rezerve edilir next-20081204.
Deponun yerel kopyanızı linux-nexther gün güncellerseniz, bu eski dal etiketlerinin büyük bir kısmını biriktireceksiniz.
Daha sonra bunların bir dizisini silip çalıştırırsanız git-gc, işlem oldukça uzun sürecek ve kullanılan blok ve inode sayısı önemli ölçüde artacaktır.

Bir " git prune" sonrasında kaybolacaklar , ancak bu temizlik işlemini yaptığımda, sık sık --yes-I-know-what-I-am-doing-and-it's-unsafe-but-just-drop-the-unreachable-objects-cause-this-is-just-a-tracking-repository"git gc" seçeneğini diledim .

Yani sizin durumunuzda, bir " git prune" yardımcı olur mu?

(muhtemelen gc.pruneexpireyapılandırma değişkeninde "şimdi" kullanıldığında , yukarıdaki davranışın gerçekleşmesi için gereklidir).


Ayrıca (aynı konu başlığından):

repack -a -d -l

Küçük 'a' harfine dikkat edin.

git-gcErişilemeyen nesnelerin paketten çıkarılmasına neden olan yeniden paketlemeyi büyük 'A' ile çağırır. Küçük 'a', ne yaptığını bilen ve git'in ulaşılamayan nesneleri düşürmesini isteyenler içindir.


1
'git erik' muhtemelen acil sorunumu çözecektir - bugün daha sonra deneyeceğim. Bununla birlikte, gevşek nesneleri iki hafta boyunca etrafta tutmanın güvenlik yönünü seviyorum, geri dönüp bazı eski revizyonlara bakmak istersem, bu çözümü gerçekten sevmiyorum. Git'in boyutu veya performansıyla ilgili herhangi bir sorun yaşamıyorum, sadece 'git gui', veritabanını sıkıştırmanın hiçbir etkisi olmasa bile veritabanını sıkıştırmamı istemekte ısrar ediyor.
Michael Donohue

çok faydalı yorum. Bu sinir bozucu "gevşek nesne" mesajı gerçekten sinir bozucu olmaya başladı. Bu sayı nereden geliyor zaten? Git-fsck çıktısı belki?
David Dombrowsky

teşekkürler - ayrıca git gc'nin kaldırmadığı gevşek nesnelerim vardı - git prune cevaptı.
Shedd

Herhangi bir deponun dışında git budama yaptım ve bazı nesneleri temizledim. Sonra problem deposuna girdim ve git budama yaptım ve tüm problemler ortadan kalktı.
Nicholas Orlowski

"git prune" OP (ve benim) sorununu çözüyor: "Bunu daha önce yaptım ve gevşek nesneleri yaklaşık 250'ye düşürdü, ancak bu pop-up'ı bastırmıyor."
Eike

32

"Gevşek Nesne" açılır penceresi geldiğinde git'in çöp toplayıcısını çalıştırma zamanının geldiğini biliyorum:

git gc

Bundan sonra açılır pencere kaybolur.

Güncelleme: (TED'in önerisi nedeniyle)

Aşağıdaki rutini içinden çıkardım git/share/git-gui/lib/database.tcl
İhtiyaçlarınızı karşılayacak şekilde değiştirebilirsiniz.

proc hint_gc {} {
    set object_limit 8
    if {[is_Windows]} {
        set object_limit 1
    }

    set objects_current [llength [glob \
        -directory [gitdir objects 42] \
        -nocomplain \
        -tails \
        -- \
        *]]

    if {$objects_current >= $object_limit} {
        set objects_current [expr {$objects_current * 256}]
        set object_limit    [expr {$object_limit    * 256}]
        if {[ask_popup \
            [mc "This repository currently has approximately %i loose objects.

To maintain optimal performance it is strongly recommended that you compress the database when more than %i loose objects exist.

Compress the database now?" $objects_current $object_limit]] eq yes} {
            do_gc
        }
    }
}

1
İletişim kutusunda Tamam'ı tıklamak tam da bunu yapmıyor mu? Gc tüm gevşek nesnelerden kurtulmasaydı, yine de iletişim kutusunu alırdı.
TED

'Tamam'ı tıkladım ve komut satırından' git gc'yi çalıştırdım - ikisi de beni 250'ye düşürüyor, ancak bunu tekrar yapmak daha fazla ilerleme sağlamıyor.
Michael Donohue

3
Garip olduğunu biliyorum ama tabanı GUI'den temizlemek bazen gevşek nesneler bırakır. GUI'yi kapatıyorum, git-gc'yi çalıştırıyorum ve sonra tüm çöpler yok oluyor.
Nick Dandoulakis

3
Tcl'yi değiştirmek sorunu düzeltir - Windows sınırını 10 * 250'ye yükselttim. Teşekkürler!
Michael Donohue

benim git gciçin komut satırından çalıştırmak sorunu çözdü ... sadece okgit gui'ye tıklamak bir şekilde hile yapmadı ...
raphael

3

Hmmmm .... Dokümanlarda bunun için bir komut satırı argümanı görmüyorum .

Sanırım kaynağını her zaman indirebilir, iletişim kutusunun kodunu çıkarabilir ve yeniden oluşturabilirsiniz.

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.