Zusammenführen und das editierbare Ergebnisfenster

Das Ergebnisfenster (unter den Vergleichsfenstern) hat auch eine Info-Zeile mit der Aufschrift Ausgabe:, dem Dateinamen und [Geändert] wenn Sie das Ergebnis bearbeitet haben. Üblicherweise enthält es durch das automatische Zusammenführen bereits Text, aber oft enthält es auch Konflikte.

Bis alle Konflikte aufgelöst sind, ist das Speichern deaktiviert. Benutzen Sie die Knöpfe Zu vorherigem Konflikt springen und Zu vorherigem ungelösten Konflikt springen bzw. Zu nächstem Konflikt springen und Zu nächstem ungelösten Konflikt springen, um die noch verbleibenden Konflikte zu finden.

Wenn nur zwei Vergleichsfenster benutzt werden, ist jeder Unterschied gleichzeitig auch ein Konflikt, der manuell gelöst werden muss.

Bei drei Vergleichsfenstern wird die erste Datei als Basis verwendet, und die zweite und dritte Datei enthalten die Änderungen. Wenn eine Zeile nur in Datei B oder C geändert wurde, aber nicht in beiden, dann wird automatisch die richtige Änderung ausgewählt. Wenn B und C allerdings Änderungen in der gleichen Zeile enthalten, erkennt KDiff3 einen manuell zu lösenden Konflikt. Wenn B und C identisch sind, sich aber von A unterscheiden, dann wird C als Quelle ausgewählt.

Die Zusammenfassungs-Spalte

Das Ergebnisfenster hat auch eine Zusammenfassungs-Spalte an der linken Seite. Sie zeigt entweder den Buchstaben des Vergleichsfensters an von dem eine Zeile stammt, oder sie ist leer, wenn alle drei Quellen an der Stelle identisch sind. Konflikte werden mit einem roten Fragezeichen ? und dem Text <Zusammenführungskonflikt> dargestellt. Weil das zeilenweise Auflösen von Konflikten sehr lange dauern würde, werden Zeilen mit gleichem Unterschied und Charakteristika gruppiert. Konflikte mit Leerräume- und Konflikte mit Nicht-Leerräumen Zeichen werden getrennt dargestellt, um das Zusammenführen von Dateien mit vielen Änderungen von Einrückungen zu vereinfachen.

Einstellung der aktuellen Gruppe und Abgleich der Zusammenführungs- und Diff-Ansichtspositionen

Durch einen Klick mit der linken Maustaste in die Zusammenfassungs-Spalte in einem der Fenster wird die erste zu der Zeile gehörende Gruppe in allen Fenstern angezeigt. Diese Gruppe wird dann die aktuelle Gruppe. Sie wird mit der Farbe Hintergrundfarbe für aktuellen Bereich hervorgehoben und jeweils zur Linken erscheint ein schwarzer Balken.

Auswahl der Eingabe A, B oder C für den aktuellen Konflikt und zur Bearbeitung

In der Werkzeugleiste unter der Menüleiste sind drei Knöpfe zur Auswahl der Eingabe mit den Buchstaben A, B und C enthalten. Klicken Sie auf diese Knöpfe, um Zeilen einzufügen oder bereits eingefügte Zeilen der entsprechenden Quelle zu löschen. Um Zeilen in mehreren Eingabefenstern auszuwählen, klicken Sie auf die zugehörigen Knöpfe in der gewünschten Reihenfolge. Wenn Sie die Zeilen aus „B“ vor den Zeilen auf „A“ anzeigen möchten, klicken Sie zuerst auf „B“ und dann auf „A“.

Wenn Sie die Einstellung Automatisch zu nächstem ungelösten Konflikt weiterspringen im Abschnitt Automatisch weitergehen verwenden, sollten Sie das abschalten, ehe Sie Zeilen aus mehreren Eingabefenstern wählen oder wenn Sie die Zeilen nach Ihrer Auswahl bearbeiten möchten. Ansonsten springt KDiff3 zum ersten Konflikt nach der Auswahl der ersten Eingabe.

Es ist oft hilfreich, die Ausgabe der Zusammenführung zu bearbeiten. In der Zusammenfassungsspalte wird das Zeichen „m“ für jede manuell geänderte Zeile angezeigt. Wenn zum Beispiel die Unterschiede in einer Weise ausgerichtet sind, das die Auswahl der Eingaben zu keinen befriedigenden Ergebnissen führen, dann markieren Sie den gewünschten Text und nutzen Kopieren und Einfügen, um ihn in die Ausgabe der Zusammenfassung einzufügen.

Manchmal bleibt durch das automatische Zusammenführen oder durch manuelles Bearbeiten keine weitere Zeile mehr in der Gruppe übrig; dann wird in diesen Zeilen der Text <Keine Zeile in der Quelle> angezeigt. Das ist nur ein Platzhalter für den Fall, dass Sie Ihre Meinung ändern und vielleicht doch wieder eine andere Quelle wählen. Dieser Text erscheint weder in der endgültigen gespeicherten Datei, noch in einer Markierung die Sie vielleicht kopieren und woanders einfügen.

Der Text <Zusammenführungskonflikt> erscheint allerdings in der Zwischenablage, wenn Sie solchen Text aus dem Ergebnisfenster kopieren. Gehen Sie vorsichtig mit dieser Funktion um.

Auswahl der Eingabe A, B oder C für alle Konflikte

Das normale Zusammenführen startet mit dem automatischen Lösen einfacher Konflikte. Das Menü Zusammenführen enthält einige häufig verwendete Funktionen. Wenn Sie bei den meisten Konflikten die gleiche Quelle auswählen müssen, können Sie z. B. überall A, B oder C auswählen. Die gleiche Möglichkeit gibt es auch für die noch verbleibenden ungelösten Konflikte oder sogar für die noch verbleibenden ungelösten Konflikte in Leerräumen. Wenn Sie solche Entscheidungen nicht zusammengefasst für eine Gruppe, sondern sogar für jeden einzelnen Unterschied im Detail treffen möchten, dann wählen Sie Alle Unterschiede zu Konflikten machen. Sie können wieder zur automatischen Auswahl von KDiff3 zurück, indem Sie Automatisch einfache Konflikte lösen wählen. KDiff3 startet das Zusammenführen dann erneut. KDiff3 fragt nach, bevor Ihre eventuell gemachten Änderungen verloren gehen.

Anmerkung

Hinweis: Wenn beim Auswählen der Quellen die Optionen Zahlen ignorieren, wie Leerräume behandeln oder C/C++ Kommentare ignorieren, wie Leerräume behandeln aktiviert sind, werden Änderungen in Zahlen oder Kommentaren auch wie Leerräume behandelt.

Automatische Zusammenführung von Schlüsselwörtern von Versionskontrollsystemen und dem Verlauf (Protokoll)

Viele Versionsverwaltungssysteme unterstützen Schlüsselwörter in der Datei wie z. B. "$Date$", "$Header$", "$Author$", "$Log$" usw. Beim Einspielen ändert das Versionsverwaltungssystem (VCS) diese Zeilen. "$Date$" wird zum Beispiel zu "$Date: 2005/03/22 18:45:01 $". Da diesen Zeile in jeder Version der Datei verschieden ist, würde ein manueller Eingriff beim Zusammenführen nötig sein.

KDiff3 bietet ein automatisches Zusammenführen für diese Einträge. Bei einfachen Zeilen, auf die die Einstellung Regulärer Ausdruck für automatische Zusammenführung in allen Eingabedateien zutrifft, wählt KDiff3 die Zeile aus B oder - wenn verfügbar - aus C. Außerdem ist es erforderlich, dass die betreffenden Zeilen im Vergleich enthalten sind und die vorherige Zeile keinen Konflikt enthält. Dieses automatische Zusammenführen kann entweder sofort nach dem Beginn einer Zusammenführung mit Zusammenführung über regulären Ausdruck beim Start einer Zusammenführung durchführen oder später mit Zusammenführung über regulären Ausdruck starten aus dem Menü Zusammenführen ausgeführt werden.

Automatisches Zusammenführen für den Verlauf oder Protokoll von Versionsverwaltungssystemen wird ebenfalls unterstützt. Das automatische Zusammenführen des Verlaufs kann entweder durch die Aktivierung von Versionsverwaltungs-Verlauf beim Start einer Zusammenführung zusammenführen im Einrichtungsdialog oder später durch Verlauf-Konflikte automatisch auflösen aus dem Menü Zusammenführen gestartet werden.

Normalerweise beginnt das Protokoll des Versionsverlaufs mit dem Schlüsselwort „$Log$“. Dies muss zur Einstellung Regulärer Ausdruck für Verlauf-Start passen. KDiff3 erkennt, welche der folgenden Zeilen im Verlaufsprotokoll enthalten sind, indem die die Zeichen vor „$Log$“ analysiert werden. Wenn diese Zeichen auch in den folgenden Zeilen erscheinen, werden Sie auch als Teil des Protokolls betrachtet.

Beim jedem Einspielen schreibt das Versionsverwaltungssystem eine eindeutige Zeile mit Informationen über Version, Datum und Zeit und danach den Kommentar des Benutzers. Diese Zeilen bilden einen Verlaufseintrag. Dieser Verlaufsabschnitt wird mit jedem Einspielen größer und die neueren Einträge werden oben nach der Verlaufsprotokollzeile eingefügt.

Wenn bei gleichzeitiger Entwicklung zwei oder mehr Entwickler einen Zweig (Branch) der Datei einspielen, enthält der Zusammenführungsverlauf mehrere Einträge, die als Konflikt beim Zusammenführen der Zweige erscheint. Das dieses Zusammenführen sehr langweilig ist , unterstützt KDiff3 zwei verschiedene Strategien: Einfügen der Verlaufsinformationen beider Entwickler am Anfang oder Sortierung durch einen benutzerdefinierten Schlüssel.

Die Methode nur alle Einträge einzufügen, ist einfacher einzurichten. KDiff3 benötigt nur eine Methode, um die zu einem Verlaufseintrag gehörenden Zeilen zu erkennen. Die meisten Versionsverwaltungssysteme fügen nach jedem Verlaufseintrag eine Leerzeile ein. Gibt es keinen anderen Leerzeilen, ist dies Kriterium für KDiff3 ausreichend. Löschen Sie den Text für Regulärer Ausdruck für Verlauf-Eintrag-Startzeile im Abschnitt Zusammenführung des Einrichtungsdialogs an. Ist das Kriterium für eine Leerzeile nicht ausreichend, können Sie einen regulären Ausdruck für den Beginn des Verlaufseintrags angeben.

Beachten Sie, dass KDiff3 doppelte Einträge im Verlauf entfernt. Wenn ein Eintrag mehrfach im Verlauf einer Eingabedatei vorkommt, bleibt in der Ausgabe nur ein Eintrag übrig.

Möchten Sie den Verlauf sortieren, müssen Sie den Schlüssel dazu angeben. Verwenden Sie Klammern, um Teile von Regulärer Ausdruck für Verlauf-Eintrag-Startzeile zu gruppieren, um diesen Ausdruck später zum Sortieren zu verwenden. Geben Sie dann für Sortierschlüsselreihenfolge für Verlauf-Eintragsstart eine durch Komma getrennte Liste von Zahlen mit der Position der Gruppen im regulären Ausdruck.

Da es nicht so einfach ist, sofort richtige Ausdrücke zu schreiben, können Sie die regulären Ausdrücke und Schlüsselgenerierung in einem dafür vorgesehenen Dialog verbessern und testen, indem Sie den Knopf Testen Sie Ihre regulären Ausdrücke drücken.

Beispiel: Angenommen ein Verlauf sieht so aus:

/**************************************************************************
** HISTORY:    $Log: \toms_merge_main_view\MyApplication\src\complexalgorithm.cpp $
**
**     \main\integration_branch_12   2 Apr 2001 10:45:41   tom
**  Merged branch simon_branch_15.
**
**     \main\henry_bugfix_branch_7\1   30 Mar 2001 19:22:05   henry
**  Improved the speed for subroutine convertToMesh().
**  Fixed crash.
**************************************************************************/

Der Verlauf beginnt mit der Startzeile, auf die der reguläre Ausdruck ".*\$Log.*\$.*" zutrifft. Dann folgen die Einträge.

Die Zeile mit dem Schlüsselwort „$Log$“ beginnt mit zwei „*“ und danach ein Leerzeichen. KDiff3 verwendet den ersten Text ohne Leerzeichen als „Startkommentar“ und nimmt an, dass der Verlauf mit der ersten Zeile ohne diesen Startkommentar endet. In diesem Beispiel enthält die letzte Zeile auch zwei Zeichen „*“ am Anfang, aber dann folgen weitere „*“ statt eines Leerzeichens. Daher endet der Verlauf mit dieser Zeile.

Ist eine Sortierung des Verlaufs nicht erforderlich, kann ein regulärer Ausdruck für die Startzeile des Verlaufseintrags zum Beispiel so aussehen. Dieser Ausdruck wurde in zwei Teile getrennt, da er sonst zu lang ist.

\s*\\main\\\S+\s+[0-9]+ (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)
 [0-9][0-9][0-9][0-9] [0-9][0-9]:[0-9][0-9]:[0-9][0-9]\s+.*

Weitere Informationen über reguläre Ausdrücke finden Sie in der Dokumentation zu regulären Ausdrücken. Beachten Sie, dass das klein geschriebene „\s“ auf jedes Leerraumzeichen und das groß geschriebene "\S" auf jedes Nicht-Leerraumzeichen passt. In diesem Beispiel enthält der Beginn des Verlaufseintrags zuerst die Versionsinformation mit „\\main\\\S+“, das Datum aus Tag „[0-9]+“, Monat „(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)“ und Jahr „[0-9][0-9][0-9][0-9]“, die Zeit „[0-9][0-9]:[0-9][0-9]:[0-9][0-9]“ und schließlich den Benutzernamen des Entwicklers „.*“.

Beachten Sie, dass die Startkommentar-Zeichen, in diesem Beispiel "**" bereits durch KDiff3 vor der Suchen nach Übereinstimmung entfernt werden. Daher beginnt der reguläre Ausdruck mit einem oder Leerraumzeichen mit "\s*". Da Kommentarzeichen in jeder Datei je nach verwendeter Programmiersprache verschieden sein können, werden die Startkommentar-Zeichen von KDiff3 entfernt und sollten nicht im regulären Ausdruck angegeben werden.

Wenn Sie den Verlauf sortiert haben möchten, muss dazu ein Sortierschlüssel berechnet werden. Dazu müssen die maßgebenden Teile im regulären Ausdruck durch Klammern gruppiert werden. Die zusätzlichen Klammer können im Verlaufseintrag verbleiben, wenn die Sortierung abgeschaltet ist.

\s*\\main\\(\S+)\s+([0-9]+) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)
 ([0-9][0-9][0-9][0-9]) ([0-9][0-9]:[0-9][0-9]:[0-9][0-9])\s+(.*)

Die Klammern enthalten jetzt: 1. Versionsinformation, 2. Tag, 3. Monat, 4. Jahr, 5. Zeit, 6. Name. Wenn Sie jedoch nach Datum und Zeit sortieren möchten, muss zuerst ein Schlüssel mit den Elementen in einer anderen Reihenfolge konstruiert werden. Zuerst das Jahr, dann Monat, Tag, Zeit, Versionsinformation und Name. Daher muss als Sortierschlüssel "4,3,2,5,1,6" angegeben werden.

Da Monatsnamen nicht zur Sortierung geeignet sind, weil dabei „Apr“ zuerst käme, ermittelt KDiff3 die Reihenfolge der angegebenen Monatsnamen und benutzt dies dann. In diesem Fall wird „Apr“ die Zahl „04“ zugeordnet. Eine Zahl wird in einen Wert mit vier Dezimalstellen mit vorangestellten Nullen für die Sortierung. Schließlich ergibt sich als Sortierschlüssel für die Startzeile des ersten Verlaufseintrags:

2001 04 0002 10:45:41 integration_branch_12   tom

Weitere Informationen finden Sie im Abschnitt Zusammenführungs-Einstellungen.