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 .gitconfigpliku. [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 diffktórego działanie będzie nadal działać jak zwykle.]
Używasz git difftooldokł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 $LOCALi $REMOTEw 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 = falselinia 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 .gitconfigpliku. [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 mergetooldo faktycznego scalenia. Przed użyciem git mergetoolwykonaj 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_namebę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 .gitconfigpowyższym przykładzie 2 linie są sugerowane jako [mergetool "meld"] cmdlinia. W rzeczywistości istnieją różne sposoby konfigurowania cmdlinii przez zaawansowanych użytkowników , ale to wykracza poza zakres tej odpowiedzi.
Ta odpowiedź ma 2 alternatywne cmdlinie, 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.
$BASEjest wspólnym przodkiem zatwierdzenia $LOCALi $REMOTE, co oznacza, że plik był taki, jak wtedy, gdy gałąź zawierająca $REMOTEbył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 $MERGEDlub $BASEw między $LOCALi $REMOTE.
Tak czy inaczej, Meld wyświetli 3 panele z $LOCALoraz $REMOTEw lewym i prawym panelu oraz w jednym $MERGEDlub $BASEw ś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; $MERGEDdla pliku zawierającego częściowo scalony plik z informacjami o konflikcie scalania lub $BASEdla przodka wspólnego zatwierdzenia $LOCALi $REMOTE. [Ponieważ obie cmdlinie mogą być przydatne, trzymam je obie w moim .gitconfigpliku. Przez większość czasu używam $MERGEDlinii i $BASElinia jest komentowana, ale komentowanie może zostać zamienione, jeśli $BASEzamiast tego chcę użyć linii.]
Uwaga dotycząca pliku wyjściowego: nie martw się, że --output "$MERGED"jest używany cmdniezależnie od tego, $MERGEDczy $BASEbył używany wcześniej w cmdlinii. Ta --outputopcja 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, $MERGEDczy $BASEjako 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 .origdo oryginalnej nazwy pliku. np file_name.orig. Po sprawdzeniu, czy jesteś zadowolony ze scalenia i uruchomieniu dowolnych testów, które możesz wykonać, .origplik 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 unchangeda następnie zapyta Was the merge successful? [y/n], jeśli odpowiesz, nrozwią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 .origplikiem 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 mergetoolprzed 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 cmdlinii, 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 cmdlinie 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 cmdlinii 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 cmdlinii Meld dla Windows. Ponieważ jestem użytkownikiem Linuksa, nie jestem w stanie przetestować różnych cmdlinii 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 meldclub 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 Filterskarcie preferencji znajduje się kilka przydatnych filtrów do ignorowania takich rzeczy jak komentarze podczas wykonywania porównania. Chociaż istnieją filtry do zignorowania All whitespacei Leading whitespacenie ma Trailing whitespacefiltru 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 Filterskarcie 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.