Moje ostatnie scalenie Git spowodowało dużą liczbę konfliktów. Moje obecne podejście polega na wyszukaniu następnego wystąpienia „<<<”, a następnie przeprowadzeniu scalenia za pomocą standardowej edycji tekstu.
Pytanie : czy istnieje sposób, w jaki Emacs może obsługiwać scalanie przy użyciu informacji dostępnych w Git na temat mojej wersji, ich wersji i podstawowej wersji pliku?
Edycja: To pytanie ma inny zakres niż to powiązane pytanie , ponieważ nie ogranicza się do wywoływania ediff.
e
pliki pokazane jako konflikty. Magit uruchomi się,ediff
aby wykonać scalenie, a następnie poprosi cię o potwierdzenie zmian, a następnie możesz wprowadzić etap scalania pliku.smerge
ivc-resolve-conflict
, jak również jeden z nichediff
) i jest już dostępny. Zgadzam się, że pierwszy wątek mógłby użyć lepszego tytułu.Odpowiedzi:
Możesz spróbować po
smerge-mode
prostu otworzyć plik będący w konflikcie i zrobić M-xsmerge-mode
RET. Podświetli wszystkie konfliktowe regiony. Dodaje także skróty klawiszowe w celu łatwego rozwiązywania konfliktów, zapoznaj się z ich dokumentacją, C-hfsmerge-mode
RETaby je poznać.Domyślny prefiks
Znajduję domyślny przedrostek dla
smerge-mode
C-c^kłopotliwego, więc zmieniłem go na C-cvWażne skróty klawiszowe
Dla mnie najważniejsze wiązania to:
smerge-next
musi smerge-command-prefixnprzejść do następnego konfliktu.smerge-previous
musi smerge-command-prefixpprzejść do poprzedniego konfliktu.smerge-keep-current
zobowiązany do smerge-command-prefixRETzachowania wersji, na której znajduje się kursor.smerge-keep-mine
zobowiązane do smerge-command-prefixmzachowania twoich zmian.smerge-keep-other
zobowiązane do smerge-command-prefixozachowania innych zmian.smerge-ediff
zobowiązany do smerge-command-prefixErozpoczęcia sesji ediff w celu scalenia konfliktów. To jest to samo covc-resolve-conflicts
(dzięki @phils i @Malabarba za zwrócenie na to uwagi).Automatyczne włączanie trybu smerge
AKTUALIZACJA: Poniższe informacje dotyczą tylko wcześniejszych wersji Emacsa
25.1
, poniższe mogą powodować problemy w późniejszych wersjach, patrz https://github.com/magit/magit/issues/3897Dodatkowo możesz być zainteresowany automatycznym włączaniem
smerge-mode
podczas odwiedzania pliku / bufora ze znacznikami konfliktu, możesz użyć czegoś takiego jak poniżej, aby to osiągnąćZauważ, że używam
buffer-list-update-hook
i nie,find-file-hook
ponieważ przez większość czasu dostaję konflikty w buforze, który jest już otwarty w emacsie, w którymfind-file-hook
to przypadku nie pomaga.Sprawdź także inne metody wymienione w tej odpowiedzi
źródło
smerge-ediff
. (2) Na jakiej wersji Emacsa jesteś? W bieżącej gałęzi Emacsa smerge włącza się automatycznie. (3) Dlaczego używaszbuffer-list-update-hook
zamiastfind-file-hook
?smerge-ediff
ivc-resolve-conflicts
są takie same.smerge-mode
skróty klawiszowe są udokumentowane w jego dokumentacji. Być może mogę tutaj zacytować instrukcję. Dzięki za opinie. 2) Korzystam z wersji 24.5, chociaż czasami wypróbowuję gałąź master, nie pamiętam, aby smerge zmieniło się automatycznie (czy to ostatnia zmiana?). 3) Wynika to z tego, że przez większość czasu mam konflikty w już otwartych buforach, w takim przypadku musiałbym wyraźnie włączyćsmerge-mode
smerge-mode
włączać przez cały czas? Być może nie robi wiele, dopóki nie zostanie wywołany.Edycja: ponieważ ta odpowiedź zyskała więcej głosów niż się spodziewałem, nieco ją rozwinąłem.
Aby uzupełnić odpowiedź przez @IqbalAnsari, możesz również użyć
vc-resolve-conflicts
(jak wspomniano przez innych, jest to alias dosmerge-ediff
). Spowoduje to uruchomienieediff
interfejsu. Po lewej stronie będzie pierwszy rodzic scalający, a drugi rodzic scalający po prawej. Są one oznaczone na modelce za pomocąMINE
iOTHER
. Scalony bufor pokazano poniżej (patrz zrzut ekranu).Keybindings
Możesz także przejść do połączonego bufora
other-window
i edytować ręcznie, na wypadek gdyby rozwiązanie konfliktu było bardziej skomplikowane niż zaakceptowanie wersji. Po zakończeniu możesz zapisać bufor i wyjść z Emacsa jak zwykle. Aby uzyskać więcej pomocy, wystarczy użyć ?podczasediff
sesji, jest tam mnóstwo bardzo przydatnych poleceń. Nadal nie wiem, co robi ich połowa!źródło
C-x v <
, chociaż w praktyce bardziej prawdopodobne jest, że będę ją wywoływał za pomocą Magita (zgodnie z komentarzem wvxvw).vc-resolve-conflict
jest pseudonimemsmerge-ediff
, który, jak sama nazwa wskazuje, rozpoczyna sesję Ediff, a nie sesję Emerge. Nawiasem mówiąc, nagłówek bibliotekiediff.el
potwierdzaemerge.el
wpływ, a następnie mówi: „Obecna wersja Ediff zastępuje Emerge. Zapewnia doskonały interfejs użytkownika i ma wiele głównych funkcji, których nie ma w Emerge. W szczególności może wykonywać łatanie i Porównywanie, łączenie i katalogowanie plików w dwóch i trzech kierunkach ”.magit-ediff-resolve
(Em
lube
w pliku z konfliktem) korzystasmerge-ediff
wewnętrznie. Jednak zastępuje to,ediff-quit-hook
aby zapewnić nieco lepsze wrażenia z kończenia sesji. Zamiast mówić, że możesz zapisać „bufor” (istnieje kilka buforów), pyta cię, czy chcesz zapisać bufor (pokazując jednocześnie jego nazwę).Jeśli zdarzy ci się używać Spacemacs, polecam aktywować „tryb przejściowy smerge”, który wyświetla menu hydra ze wszystkimi możliwymi poleceniami smerge.
Aby to zrobić, wystarczy wywołać Mx
spacemacs/smerge-transient-state/body
, który jest domyślnie przypisany doSPC-g-r
.Oto zrzut ekranu:
Edycja pliku powinna być intuicyjna:
n
aby przejść do następnego przystojniaka.źródło