Zbiór wiśni może nie być tak szybki, ponieważ prawdopodobnie wykrywa nazwy jako część scalenia, które mogą być kosztowne, szczególnie gdy wybierasz coś, co jest daleko od HEAD.
może się okazać, że twój git config ma gc.auto = 0
(git config --get gc.auto
), więc dokładnie sprawdzić, czy jest włączone, lub po prostu uruchomić:
git gc
w celu porządkowych niepotrzebnych plików i optymalizacji lokalnego repozytorium.
Możesz także spróbować ustawić zmienną konfiguracyjną merge.renamelimit
na coś mniejszego (np. 1, ponieważ 0 oznacza bez limitu). Jeśli to nie pomoże, spróbuj profilować swój git (np. Używając strace
lub perf record git cherry-pick ...
) i znajdź wąskie gardło.
Patrz: cherry-pick is slow
Dla scalenia-rekurencyjnej, że zawsze chcemy obliczyć parami zmienia nazwę od każdej strony i przodka. Tak więc różnica do docelowego zbioru wiórów zawsze będzie kosztowną operacją O (liczba operacji zmian między źródłem a dest).
Bez zmiany nazwy można lepiej wykorzystać faktyczne scalenie z chodzeniem w trójwymiarze drzewa . Np. Widzisz, że niektóre pod-drzewa znajdują się w drzewie A w drzewach ours
i ancestor
, ale w drzewie B w theirs
.Więc nie musisz więcej schodzić i możesz po prostu powiedzieć "weź ich" (cóż, masz zejście na theirs
, aby uzyskać wartości). Ale spodziewam się, że komplikuje to więcej interakcji z indeksem (i prawdopodobnie nie jest to warte poświęcenia z powodu problemu zmiany nazwy).
-Peff
Dzięki za odpowiedź, że ma rację. Widzę tę stronę man. jednak, jak powiedział, planujemy pominąć zmiany, które pojawiają się w innym oddziale. Czy zamiast tego mamy inne sposoby? –
Jeśli używasz scalania zamiast wybierania wiśniowego, możesz to zrobić bez całego narzutu. – Michael
Tak, wiem, ale podstawa kodu problemu nie jest naszą pracą, po prostu pobieramy zmiany, aby przeanalizować jakość jakiegoś składnika. nie możemy kontrolować zachowań programistów. –