Jak skonfigurować i używać Meld jako mojego git difftool?
git difftool wyświetla różnicę za pomocą programu różnicowego GUI (tj. Meld) zamiast wyświetlania wyjścia różnicowego w twoim terminalu.
Chociaż można ustawić program GUI w wierszu polecenia, używając -t <tool> / --tool=<tool>
go, bardziej sensowne jest skonfigurowanie go w .gitconfig
pliku. [Uwaga: patrz sekcje dotyczące ucieczkowych cytatów i ścieżek systemu Windows u dołu.]
# Add the following to your .gitconfig file.
[diff]
tool = meld
[difftool]
prompt = false
[difftool "meld"]
cmd = meld "$LOCAL" "$REMOTE"
[Uwaga: te ustawienia nie zmienią zachowania, git diff
którego działanie będzie nadal działać jak zwykle.]
Używasz git difftool
dokładnie w taki sam sposób, jak używasz git diff
. na przykład
git difftool <COMMIT_HASH> file_name
git difftool <BRANCH_NAME> file_name
git difftool <COMMIT_HASH_1> <COMMIT_HASH_2> file_name
Jeśli właściwie skonfigurowane, okno Meld otworzy się, wyświetlając różnicę za pomocą interfejsu GUI.
Kolejność paneli okna Meld GUI można kontrolować według kolejności $LOCAL
i $REMOTE
w cmd
, to znaczy, który plik jest wyświetlany w lewym okienku, a który w prawym okienku. Jeśli chcesz je na odwrót, po prostu zamień je w ten sposób:
cmd = meld "$REMOTE" "$LOCAL"
Wreszcie prompt = false
linia po prostu przestaje pytać gita, czy chcesz uruchomić Meld, czy domyślnie git wydaje monit.
Jak skonfigurować i używać Melda jako mojego narzędzia Git Fibletool?
git Combetool pozwala używać programu do scalania GUI (tj. Meld) do rozwiązywania konfliktów scalania, które wystąpiły podczas scalania.
Podobnie jak difftool, możesz ustawić program GUI w wierszu poleceń, -t <tool> / --tool=<tool>
ale, jak poprzednio, bardziej sensowne jest skonfigurowanie go w .gitconfig
pliku. [Uwaga: patrz sekcje dotyczące ucieczkowych cytatów i ścieżek systemu Windows u dołu.]
# Add the following to your .gitconfig file.
[merge]
tool = meld
[mergetool "meld"]
# Choose one of these 2 lines (not both!) explained below.
cmd = meld "$LOCAL" "$MERGED" "$REMOTE" --output "$MERGED"
cmd = meld "$LOCAL" "$BASE" "$REMOTE" --output "$MERGED"
NIE używasz git mergetool
do faktycznego scalenia. Przed użyciem git mergetool
wykonaj scalanie w zwykły sposób za pomocą git. na przykład
git checkout master
git merge branch_name
Jeśli występuje konflikt scalania, git wyświetli coś takiego:
$ git merge branch_name
Auto-merging file_name
CONFLICT (content): Merge conflict in file_name
Automatic merge failed; fix conflicts and then commit the result.
W tym momencie file_name
będzie zawierał częściowo scalony plik z informacjami o konflikcie scalania (jest to plik ze wszystkimi wpisami >>>>>>>
i <<<<<<<
).
Mergetool może być teraz używany do rozwiązywania konfliktów scalania. Bardzo łatwo zaczynasz od:
git mergetool
Jeśli prawidłowo skonfigurowane, otworzy się okno Meld z 3 plikami. Każdy plik będzie zawarty w osobnym panelu interfejsu GUI.
W .gitconfig
powyższym przykładzie 2 linie są sugerowane jako [mergetool "meld"]
cmd
linia. W rzeczywistości istnieją różne sposoby konfigurowania cmd
linii przez zaawansowanych użytkowników , ale to wykracza poza zakres tej odpowiedzi.
Ta odpowiedź ma 2 alternatywne cmd
linie, które między nimi zaspokoją większość użytkowników i będą dobrym punktem wyjścia dla zaawansowanych użytkowników, którzy chcą przenieść narzędzie na wyższy poziom złożoności.
Po pierwsze, co oznaczają parametry:
$LOCAL
to plik w bieżącej gałęzi (np. master).
$REMOTE
to plik w łączonej gałęzi (np. nazwa_gałęzi).
$MERGED
to częściowo scalony plik z zawartymi w nim informacjami o konflikcie scalania.
$BASE
jest wspólnym przodkiem zatwierdzenia $LOCAL
i $REMOTE
, co oznacza, że plik był taki, jak wtedy, gdy gałąź zawierająca $REMOTE
była pierwotnie utworzona.
Sugeruję użycie:
[mergetool "meld"]
cmd = meld "$LOCAL" "$MERGED" "$REMOTE" --output "$MERGED"
lub:
[mergetool "meld"]
cmd = meld "$LOCAL" "$BASE" "$REMOTE" --output "$MERGED"
# See 'Note On Output File' which explains --output "$MERGED".
Wybór jest czy do użytku $MERGED
lub $BASE
w między $LOCAL
i $REMOTE
.
Tak czy inaczej, Meld wyświetli 3 panele z $LOCAL
oraz $REMOTE
w lewym i prawym panelu oraz w jednym $MERGED
lub $BASE
w środkowym panelu.
W obu przypadkach środkowy panel to plik, który należy edytować, aby rozwiązać konflikty scalania. Różnica polega na tym, w której pozycji początkowej edytowania wolisz; $MERGED
dla pliku zawierającego częściowo scalony plik z informacjami o konflikcie scalania lub $BASE
dla przodka wspólnego zatwierdzenia $LOCAL
i $REMOTE
. [Ponieważ obie cmd
linie mogą być przydatne, trzymam je obie w moim .gitconfig
pliku. Przez większość czasu używam $MERGED
linii i $BASE
linia jest komentowana, ale komentowanie może zostać zamienione, jeśli $BASE
zamiast tego chcę użyć linii.]
Uwaga dotycząca pliku wyjściowego: nie martw się, że --output "$MERGED"
jest używany cmd
niezależnie od tego, $MERGED
czy $BASE
był używany wcześniej w cmd
linii. Ta --output
opcja informuje Meld, w której nazwie pliku git ma zostać zapisany plik rozwiązywania konfliktu. Meld zapisze zmiany konfliktu w tym pliku, niezależnie od tego, czy używasz go, $MERGED
czy $BASE
jako początkowego punktu edycji.
Po edycji środkowego panelu w celu rozwiązania konfliktów scalania, po prostu zapisz plik i zamknij okno Meld. Git wykona aktualizację automatycznie, a plik w bieżącej gałęzi (np. Master) będzie teraz zawierał wszystko, co skończyło się w środkowym okienku.
git utworzy kopię zapasową częściowo scalonego pliku z zawartymi w nim informacjami o konflikcie scalania, dołączając .orig
do oryginalnej nazwy pliku. np file_name.orig
. Po sprawdzeniu, czy jesteś zadowolony ze scalenia i uruchomieniu dowolnych testów, które możesz wykonać, .orig
plik można usunąć.
W tym momencie możesz teraz wykonać zatwierdzenie, aby zatwierdzić zmiany.
Jeśli podczas edytowania konfliktów scalania w Meld chcesz zrezygnować z używania Meld, a następnie wyjdź z Meld bez zapisywania pliku rozdzielczości scalania w środkowym panelu. git odpowie komunikatem, file_name seems unchanged
a następnie zapyta Was the merge successful? [y/n]
, jeśli odpowiesz, n
rozwiązywanie konfliktów scalania zostanie przerwane, a plik pozostanie niezmieniony. Zauważ, że jeśli zapisałeś plik w Meld w dowolnym momencie, nie otrzymasz ostrzeżenia i monitu od git. [Oczywiście, możesz po prostu usunąć plik i zastąpić go .orig
plikiem kopii zapasowej , który Git przygotował dla Ciebie.]
Jeśli masz więcej niż 1 plik z konfliktami scalania, git otworzy nowe okno Meld dla każdego z nich, jeden po drugim, aż wszystkie zostaną zakończone. Nie wszystkie zostaną otwarte w tym samym czasie, ale kiedy zakończysz edycję konfliktów w jednym i zamkniesz Meld, git otworzy następny i tak dalej, aż wszystkie konflikty scalenia zostaną rozwiązane.
Rozsądnie byłoby stworzyć fikcyjny projekt do przetestowania użycia git mergetool
przed użyciem go w projekcie na żywo . Pamiętaj, aby w teście użyć nazwy pliku zawierającej spację, na wypadek gdyby Twój system operacyjny wymagał od ciebie znaków cudzysłowu w cmd
linii, patrz poniżej.
Ucieczka znaków cytatu
W niektórych systemach operacyjnych może być konieczne wstawianie cudzysłowów cmd
. Mniej doświadczeni użytkownicy powinni pamiętać, że wiersze poleceń config powinny być testowane z nazwami plików zawierającymi spacje, a jeśli cmd
linie nie działają z nazwami plików zawierającymi spacje, spróbuj uciec od cudzysłowów. na przykład
cmd = meld \"$LOCAL\" \"$REMOTE\"
W niektórych przypadkach może być potrzebna bardziej złożona zmiana znaczenia cytatów. Pierwszy z linków do ścieżki Windows poniżej zawiera przykład potrójnego ucieczki każdego cytatu. To nuda, ale czasem konieczna. na przykład
cmd = meld \\\"$LOCAL\\\" \\\"$REMOTE\\\"
Ścieżki systemu Windows
Użytkownicy systemu Windows prawdopodobnie będą potrzebować dodatkowej konfiguracji dodanej do cmd
linii Meld . Może być konieczne użycie pełnej ścieżki do meldc
, która została zaprojektowana do wywoływania w systemie Windows z wiersza polecenia, lub mogą potrzebować lub chcą użyć opakowania. Powinni przeczytać poniższe strony StackOverflow, które dotyczą ustawiania prawidłowej cmd
linii Meld dla Windows. Ponieważ jestem użytkownikiem Linuksa, nie jestem w stanie przetestować różnych cmd
linii systemu Windows i nie mam żadnych dodatkowych informacji na ten temat, poza zaleceniem użycia moich przykładów z dodaniem pełnej ścieżki do Meld meldc
lub dodaniem folderu programu Meld do twojego path
.
Ignorowanie końcowych białych znaków w Meld
Meld ma wiele preferencji, które można skonfigurować w GUI.
Na Text Filters
karcie preferencji znajduje się kilka przydatnych filtrów do ignorowania takich rzeczy jak komentarze podczas wykonywania porównania. Chociaż istnieją filtry do zignorowania All whitespace
i Leading whitespace
nie ma Trailing whitespace
filtru ignorowania (zasugerowano to jako dodatek do listy mailingowej Meld, ale nie jest dostępny w mojej wersji).
Ignorowanie końcowych białych znaków jest często bardzo przydatne, szczególnie podczas współpracy, i można je łatwo dodać ręcznie za pomocą prostego wyrażenia regularnego na Text Filters
karcie preferencji Meld .
# Use either of these regexes depending on how comprehensive you want it to be.
[ \t]*$
[ \t\r\f\v]*$
Mam nadzieję, że to pomoże wszystkim.