Jak pominąć wyskakujące okienko "Loose Object " podczas uruchamiania'Git gui'

Kiedy uruchamiam 'git gui' dostaję wyskakujące okienko z napisem

This repository currently has approximately 1500 loose objects.

Następnie sugeruje kompresję bazy danych. Robiłem to wcześniej i redukuje luźne obiekty do około 250, ale to nie tłumi wyskakującego okienka. Ponowne kompresowanie nie zmienia liczby luźnych obiektów.

Nasz obecny przepływ pracy wymaga znaczącego użycia 'rebase' podczas przechodzenia z Perforce, a Perforce nadal jest kanonicznym SCM. Gdy Git będzie kanonicznym SCM, zrobimy regularne połączenia i problem luźnych obiektów powinien zostać znacznie złagodzony.

W międzyczasie naprawdę chciałbym, aby to "pomocne" popup zniknęło.

Author: JJD, 2009-07-09

4 answers

Ponieważ nikt nie miał jeszcze odpowiedzi, zajrzałem do kodu, aby zobaczyć, jak usunąć kod, który wyświetla to okno dialogowe. Znalazłem hint_gc procedurę, która to robi i miejsce, w którym to się nazywa. W tym samym czasie zauważyłem, że pod koniec 2011 roku została dodana Opcja konfiguracji wyłączająca okno dialogowe . Ta zmiana (część git-gui 0.16.0) została połączona z głównym linkiem Gita na 2011-12-14.

Więc jeśli używasz Git w wersji 1.7.9 lub nowszej, możesz wyłączyć okno dialogowe z ostrzeżeniem za pomocą następujące polecenie:

git config --global gui.gcwarning false

Jeśli używasz starszej wersji, możesz edytować /lib/git-core/git-gui i usunąć linię after 1000 hint_gc lub edytować /usr/share/git-gui/lib/database.tcl i usunąć treść procedury hint_gc. (Te ścieżki plików znajdują się w Cygwinie - w innych środowiskach pliki mogą znajdować się w innych lokalizacjach. Dla Windows jest to c:\Program Files\Git\mingw64\libexec\git-core\git-gui.tcl)

 176
Author: Esko Luontola,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-17 09:21:15

Update: git prune "rozwiąże" problem, ponieważ usunie te luźne obiekty
(git gc wywołania git prune, ale domyślnie tylko dla luźnych obiektów starszych niż dwa tygodnie).
Jednak jak wspomina w komentarzach op Michael Donohue: ]}

Podoba mi się aspekt bezpieczeństwa trzymania luźnych przedmiotów przez dwa tygodnie, powinienem wrócić i spojrzeć na Stare poprawki, więc nie podoba mi się to rozwiązanie.
Nie jestem. mając jakiekolwiek problemy z rozmiarem lub wydajnością git, to po prostu 'Git gui' nalega na poproszenie mnie o kompresję bazy danych, nawet jeśli kompresja bazy danych nie przyniesie żadnego efektu.


Oryginalna odpowiedź:

Problem" git gc " Nie usuwania wszystkich luźnych obiektów był zgłaszany wcześniej (późno 2008, ""git gc" wydaje się, że nie usuwa już luźnych przedmiotów "

git gc usuwa tylko luźne przedmioty starsze niż dwa tygodnie, jeśli naprawdę chcesz je teraz usunąć, Uruchom Git prune.
Ale upewnij się, że żaden inny proces git nie może być aktywny podczas jego uruchamiania, lub może to nastąpić na czymś.

"git gc" rozpakuje obiekty, które stały się niedostępne i znajdowały się obecnie w pakietach.
W rezultacie ilość miejsca na dysku używanego przez repozytorium git może znacznie wzrosnąć po operacji "git gc", co może być zaskakujące dla kogoś, kto pracuje prawie na pełnym dysku system plików, usuwa kilka gałęzi z repozytorium śledzenia, a następnie robi "git gc" może dostać bardzo nieprzyjemną niespodziankę.

[przykład: ] stare gałęzie są zarezerwowane za pomocą znacznika, takiego jak next-20081204.
Jeśli codziennie aktualizujesz lokalną kopię repozytorium linux-next, zgromadzisz dużą liczbę tych starych znaczników gałęzi.
Jeśli następnie usuniesz całą ich serię i uruchomisz git-gc, operacja zajmie sporo czasu, a liczba bloków i stosowane i-węzły będą znacznie rosły.

Znikną po " git prune", ale kiedy robię tę operację sprzątania, często marzyłem o opcji --yes-I-know-what-I-am-doing-and-it's-unsafe-but-just-drop-the-unreachable-objects-cause-this-is-just-a-tracking-repository na "git gc".

Więc w Twoim przypadku, Czy "git prune" byłoby pomocne?

(prawdopodobnie z użyciem "now" w zmiennej konfiguracyjnej gc.pruneexpire, potrzebnej do wystąpienia powyższego zachowania).


Masz też (z tego samego wątku):

repack -a -d -l

Zwróć uwagę na małe litery "a".

git-gc wywołania przepakowują się wielkimi literami "A", co powoduje rozpakowanie nieosiągalnych obiektów. Małe "a", jest dla ludzi, którzy wiedzą, co robią i chcą, aby git po prostu upuścił nieosiągalne obiekty.

 50
Author: VonC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:02:17

Kiedy wyskakuje" Loose Object " wiem, że nadszedł czas, aby uruchomić garbage collector Gita:

git gc

Potem okienko zniknie.

Update: (ze względu na sugestię T. E. D.)

Wyciągnąłem poniższą rutynę z git/share/git-gui/lib/database.tcl
Możesz go zmodyfikować do swoich potrzeb.

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
        }
    }
}
 33
Author: Nick Dandoulakis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-09 23:14:49

Hmmmm....Nie widzę argumentu wiersza poleceń w docs.

Przypuszczam, że zawsze możesz ściągnąć jego źródło, wyjąć kod do okna dialogowego i odbudować.

 3
Author: T.E.D.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-09 21:59:48