Wie konnte ich Kraft mergetool GUI (KDiff3) werden immer angezeigt?
Wie könnte ich Sie zwingen, das mergetool GUI immer angezeigt wird, und deaktivieren Sie alle automatischen auflösen?
Manchmal, wenn es zu einem Konflikt während einer Zusammenführung, und ich benutze das mergetool, es Sie einfach sofort wieder, nachdem ich drücken Sie Enter auf die Frage "drücken Sie return, um zu beginnen merge resolution tool (kdiff3)" und keine GUI angezeigt wird und der Konflikt scheint gelöst zu sein.
Ich muss Git konfiguriert KDiff3 als mergetool jetzt, aber es passiert auch, wenn ich codecompare
als mergetool angegeben. Ich weiß, dass es eine option "Automatisch speichern und beenden auf merge ohne Konflikte" in KDiff3, die könnten theoretisch die Ursache der beschriebenen Verhaltensweisen, aber ich habe diese option deaktiviert/deaktiviert die ganze Zeit.
Außerdem gibt es die trustExitCode option direkt im Git mergetool gitconfig, die ich auf true gesetzt, aber selbst wenn ich ihn auf false setzen, wird das GUI nicht angezeigt wird.
Ich bin nicht sicher, wer hat die auto-Lösung sowieso. Mergetool in einigen Vorverarbeitung oder KDiff3?
Ich bin unter Windows und habe das Git-Erweiterungen installiert.
Ähnliche Frage spezifisch für KDiff3, gefragt wurde auch hier: Kdiff3 nicht öffnen mit mergetool Befehl
Du musst angemeldet sein, um einen Kommentar abzugeben.
Git hat
--auto
hart codiert als Kommandozeilen-option, um KDiff3, die bewirkt, dass die GUI nicht zu zeigen, wenn alle Konflikte automatisch aufgelöst werden kann, indem KDiff3. In der KDiff3-Einstellungen können Sie angeben, Kommandozeilen-Optionen zu ignorieren, sondern setzen--auto
es funktionierte nicht für mich.Als workaround konfiguriert ich meine eigene Variante von KDiff3 als das merge-tool:
Dies ist sehr ähnlich zu dem, was Git verwendet, die standardmäßig für KDiff3, aber ohne die
--auto
Flagge.Rufen Sie nun
git mergetool -t kdiff3NoAuto
oder konfigurierenkdiff3NoAuto
als mergetool weltweit und KDiff3 wird immer angezeigt, wenn der Lösung von Konflikten.Bezug auf den zweiten Teil Ihrer Frage, wenn Sie wirklich wollen, deaktivieren Sie alle automatischen auflösen, fügen Sie einfach
--qall
zu denkdiff3
Befehlszeile oben. Dann muss man aber manuell beheben Sie alle änderungen in die Datei manuell, selbst diejenigen, die nicht in einem Git-Konflikt. Das beste Szenario wäre: KDiff3 zeigt, wie Git merged die Dateien und lässt die Konflikte, die offen für den Benutzer zu wählen.Das Verhalten von
git mergetool
ist völlig abhängig von der merge-Werkzeug gewählt ist, und das Kommandozeilen-Git geht es. Deshalb, um das Verhalten ändern, müssen Sie eine Befehlszeile, die das macht, was Sie möchten, und konfigurieren Sie Git verwenden, die Befehl Linie.Hatte ich diese Frage mir selbst (besonders im Hinblick auf KDiff3), und PiQuer Antwort hat mich ein Teil des Weges, aber es hat mir zu denken. Es sollte ein Weg, um zu replizieren, Git ' s Standard-Verhalten genau für KDiff3 außer ohne die
--auto
option (das ist, was bewirkt, dass KDiff3 nicht zur Anzeige der GUI).Wie es aussieht ist die Quelle für den Standard-Befehl für das KDiff3-und merge-tool ist in der Datei git/mergetools/kdiff3. Das sieht aus wie ein shell-Skript, so sollten wir in der Lage sein, es exakt zu kopieren! Setzen, dass auf eine Zeile, entfernen
--auto
, und Flucht die Dinge gibt uns dazu:Den
base_present
undmerge_tool_path
Variablen werden nicht ausdrücklich erwähnt wird in der Git-Dokumentation, die als verfügbar für den Einsatz inmergetool.<tool>.cmd
, so ist es möglich, an einem gewissen Punkt in der Zukunft, dass dieser Befehl kann nicht funktionieren. Sie konnten aber leicht ersetzt werden mit einem Befehl testen, obBASE
bezieht sich auf eine Datei, die vorhanden ist, und einen hart codierten Pfad für KDiff3, beziehungsweise.Beachten Sie, dass der obige Befehl ersetzt den Standard-Befehl für das Git ' s
kdiff3
merge-tool, anstatt eine separate.Bezug auf ein paar andere Punkte in der ursprünglichen Frage:
trustExitCode
Einstellung weist Git an, ob der exit-code des merge-tool ist eine richtige Angabe, ob das Zusammenführen erfolgreich war. Es wird keine Auswirkungen auf das Verhalten von merge-tool, sondern eher das Verhalten von Git einmal die merge-tool beendet wurde. Finden Sie die Anleitung für git-mergetool.git mergetool
alles geschieht durch das merge-tool selbst.git mergetool
bloß startet das externe tool auf die Datei-Versionen, die müssen zusammengeführt werden.git config --unset
Einstellungen zu entfernen. Wenn Sie die genauen Befehl, den ich oben gab, danngit config --global --unset mergetool.kdiff3.cmd
wird, entfernen Sie einfach die betreffende Einstellung). Diese Einstellung funktioniert auf jeden Fall einwandfrei auf Windows. Ich benutze meistens Git unter Windows. Bin nicht sicher, warum Sie erlebt ein problem. Eine Sache, die möglicherweise erforderlich sein, für diese zu arbeiten (je nach system) zu setzen, ist mergetool.kdiff3.Pfad der vollständige Pfad zu KDiff3.Anstelle der Konfiguration mergetool, die nur aufgerufen wird, wenn es einen Konflikt gibt, legen Sie einfach ein merge-Treiber mit KDiff3:
Können Sie diese Treiber der globalen durch hinzufügen
--global
.Aber Sie müssen hinzufügen ein .gitattribute in Ihrem repository:
Wenn das problem zu streng bezieht sich auf unerwünschte Konflikt auto-Auflösung...
Einmal KDiff3 geöffnet hat, können Sie einfach drücken Sie eine
Merge /Set Deltas to Conflicts
aus dem Menü, und der Status wird aktualisiert, um eine schöne Mensch-angetrieben Konfliktlösung problem.git mergetool --tool=kdiff3
?