Meine letzte Git-Fusion hat zu einer großen Anzahl von Konflikten geführt. Mein aktueller Ansatz besteht darin, nach dem nächsten Auftreten von "<<<" zu suchen und dann die Zusammenführung durch Standard-Textbearbeitung durchzuführen.
Frage : Gibt es eine Möglichkeit, wie Emacs das Zusammenführen unter Verwendung der in Git verfügbaren Informationen zu meiner Version, ihrer Version und der Basisversion der Datei unterstützen kann?
Bearbeiten: Diese Frage hat einen anderen Umfang als diese verwandte Frage , da sie nicht auf das Aufrufen von ediff beschränkt ist.
e
auf Dateien drücken , die als Konflikt angezeigt werden. Magit startetediff
die Zusammenführung und fordert Sie anschließend auf, Ihre Änderungen zu bestätigen. Anschließend können Sie die zusammengeführte Datei bereitstellen.smerge
undvc-resolve-conflict
auch einen anediff
) und gibt es schon länger. Ich bin damit einverstanden, dass der erste Thread einen besseren Titel verwenden könnte.Antworten:
Vielleicht möchten Sie es einfach ausprobieren,
smerge-mode
indem Sie die in Konflikt stehende Datei öffnen und ausführen M-xsmerge-mode
RET. Es werden alle Konfliktregionen hervorgehoben. Es werden auch Tastenkombinationen hinzugefügt C-hfsmerge-mode
RET, um die Konflikte einfach zu lösen. Informationen dazu finden Sie in der Dokumentation .Standardpräfix
Ich finde das Standardpräfix für
smerge-mode
C-c^umständlich, daher habe ich es in geändert C-cvWichtige Tastenkombinationen
Für mich sind die wichtigsten Bindungen:
smerge-next
verpflichtet, smerge-command-prefixnzum nächsten Konflikt zu bewegen.smerge-previous
verpflichtet, smerge-command-prefixpzum vorherigen Konflikt zu bewegen.smerge-keep-current
verpflichtet smerge-command-prefixRET, die Version beizubehalten, auf der sich der Cursor befindet.smerge-keep-mine
verpflichtet smerge-command-prefixm, Ihre Änderungen zu behalten.smerge-keep-other
verpflichtet smerge-command-prefixo, andere Änderungen beizubehalten.smerge-ediff
verpflichtet, smerge-command-prefixEeine Ediff-Sitzung zu starten, um die Konflikte zusammenzuführen. Dies ist dasselbe wievc-resolve-conflicts
(danke @phils und @Malabarba für den Hinweis).Smerge-Modus automatisch aktivieren
UPDATE: Folgendes ist nur für frühere Emacs-Versionen relevant
25.1
, das Folgende kann in späteren Versionen zu Problemen führen (siehe https://github.com/magit/magit/issues/3897)Außerdem könnten Sie daran interessiert sein, die automatische Aktivierung
smerge-mode
beim Aufrufen einer Datei / eines Puffers mit Konfliktmarkierungen zu aktivieren. Dazu können Sie Folgendes verwendenBeachten Sie, dass ich einen Puffer verwende
buffer-list-update-hook
und nicht,find-file-hook
da ich die meiste Zeit Konflikte in einem Puffer erhalte, der bereits in Emacs geöffnet ist. In diesem Fallfind-file-hook
ist dies keine Hilfe.Überprüfen Sie auch andere in dieser Antwort erwähnte Methoden
quelle
smerge-ediff
. (2) Auf welcher Emacs-Version bist du? Auf dem aktuellen Emacs-Master-Zweig wird Smerge automatisch aktiviert. (3) Warum verwenden Siebuffer-list-update-hook
stattfind-file-hook
?smerge-ediff
undvc-resolve-conflicts
dasselbe sind.smerge-mode
die Tastenkombinationen in der Dokumentation dokumentiert sind. Vielleicht kann ich das Handbuch hier der Vollständigkeit halber zitieren. Danke für die Rückmeldung. 2) Ich bin auf v24.5, obwohl ich manchmal einen Master-Zweig ausprobiere, kann ich mich nicht erinnern, dass Smerge automatisch gedreht wurde (ist es eine neue Änderung?). 3) Das ist , weil die meisten der Zeit ich in bereits geöffneten Puffern Konflikte bekommen, wobei ich brauchen würde , um explizit einschaltensmerge-mode
smerge-mode
aktiviert zu sein? Vielleicht macht es nicht viel, bis es aufgerufen wird.Edit: Da diese Antwort mehr positive Stimmen hat als ich erwartet hatte, habe ich sie ein wenig erweitert.
Um die Antwort durch @IqbalAnsari zu ergänzen, könnten Sie auch verwenden
vc-resolve-conflicts
(wie von anderen erwähnt, ist es ein Alias fürsmerge-ediff
). Dies startet dieediff
Schnittstelle. Links befindet sich das erste übergeordnete Element und rechts das zweite übergeordnete Element. Sie sind auf der Modeline mit markiertenMINE
undOTHER
jeweils. Der zusammengeführte Puffer wird unten angezeigt (siehe Screenshot).Tastenbelegungen
Sie können auch mit zum zusammengeführten Puffer navigieren
other-window
und von Hand bearbeiten, falls das Lösen eines Konflikts komplizierter ist als das Akzeptieren einer Version. Wenn Sie fertig sind, können Sie den Puffer speichern und Emacs wie gewohnt beenden. Weitere Hilfe erhalten Sie, wenn Sie diese ?während derediff
Sitzung verwenden. Dort finden Sie eine ganze Reihe sehr nützlicher Befehle. Ich weiß immer noch nicht, was die Hälfte von ihnen macht!quelle
C-x v <
, obwohl ich es in der Praxis eher mit Magit aufrufen werde (wie in wvxvws Kommentar angegeben).vc-resolve-conflict
ist ein Alias fürsmerge-ediff
, der, wie der Name schon sagt, eine Ediff-Sitzung startet, keine Emerge-Sitzung. Übrigensediff.el
erkennt der Bibliotheksheader denemerge.el
Einfluss von s an und sagt dann weiter: "Die vorliegende Version von Ediff ersetzt Emerge. Sie bietet eine überlegene Benutzeroberfläche und verfügt über zahlreiche wichtige Funktionen, die in Emerge nicht zu finden sind. Insbesondere kann sie Patches ausführen und 2-Wege und 3-Wege Dateivergleich, Zusammenführen und Verzeichnisoperationen. "magit-ediff-resolve
(Em
odere
auf eine Datei mit Konflikten)smerge-ediff
intern verwendet. Es hat jedoch Vorrang vor demediff-quit-hook
, um ein etwas besseres Sitzungsende zu erzielen. Anstatt Ihnen mitzuteilen, dass Sie "den Puffer" speichern könnten (es gibt mehrere Puffer), werden Sie gefragt, ob Sie den Puffer speichern möchten (während Sie seinen Namen anzeigen).Wenn Sie Spacemacs verwenden, würde ich empfehlen, den "Smerge-Transient-Modus" zu aktivieren, der ein Hydra-Menü mit allen möglichen Smerge-Befehlen anzeigt.
Rufen Sie dazu einfach Mx auf
spacemacs/smerge-transient-state/body
, das standardmäßig zugewiesen istSPC-g-r
.Hier ist ein Screenshot:
Das Bearbeiten Ihrer Datei sollte dann intuitiv sein:
n
, um zum nächsten Knoten zu gelangen.quelle