Open Source-Projekt Trac hat einen ausgezeichneten Diff-Textmarker - er hebt geänderte Zeilen und geänderte Bytes in jeder geänderten Zeile hervor! Beispiele finden Sie hier oder hier .
Gibt es eine Möglichkeit, das gleiche Farbhighlight (dh geänderte Zeilen und auch geänderte Bytes ) im Bash-Terminal git
oder vim
für die Diff-Ausgabe (Patch-Datei) zu verwenden?
Antworten:
Das
diff-highlight
Perl-Contrib-Skript erzeugt eine Ausgabe, die der der Trac-Screenshots so ähnlich ist, dass Trac sie wahrscheinlich verwendet:Installieren mit:
Verschieben Sie die Datei
diff-highlight
in das~/bin/
Verzeichnis (oder wo immer Sie sich$PATH
befinden) und fügen Sie Folgendes hinzu~/.gitconfig
:Von @cirosantilli vorgeschlagene Installation durch einfaches Kopieren und Einfügen:
quelle
git add -p
. Bitte fügen Sie auch hinzu:git config --global interactive.diffFilter diff-highlight
Verwenden Sie während der Verwendung von
git diff
odergit log
und möglicherweise anderen die Option--word-diff=color
(es gibt auch andere Modi für Wortunterschiede übrigens).quelle
--word-diff=color
ist wirklich besser (besonders mitgit config color.diff.old "red reverse"
undgit config color.diff.new "green reverse"
), aber es ist nicht das, was ich will :(git add --patch
: stackoverflow.com/questions/10873882/…diff-highlight
ist, dass es sowohl für Wortunterschiede als auch für Zeilendifferenzen gut funktioniert.diff-so-fancy
ist eindiff
Textmarker für menschliche Augäpfel.Es entfernt die führenden
+
/-
für das Ausschneiden / Einfügen störenden / und macht klare Abschnitte zwischen Dateien.Farbig
git
(links) vsdiff-so-fancy
(rechts - beachten Sie die Highlights auf Charakterebene):Wenn Sie die
diff-so-fancy
Ausgabe (auf der rechten Seite) möchten, aber nicht auf Dateien in einemgit
Repository beschränkt sind, fügen Sie die folgende Funktion hinzu.bashrc
, um sie für alle Dateien zu verwenden:Z.B:
Charakter Level - Hervorhebung und
diff
StandardformatWenn Sie die nicht standardmäßige Formatierung von nicht mögen
diff-so-fancy
, aber dennoch einegit
Hervorhebung auf Zeichenebene wünschen , verwenden Siediff-highlight
diese, umgit
die Ausgabe zu übernehmen und die wirklich hübschediff
Ausgabe im Standardformat zu erstellen:Um es standardmäßig von zu verwenden
git
, fügen Sie Folgendes hinzu.gitconfig
:Der
[pager]
Abschnitt weist Siegit
an, die bereits farbige Ausgabe andiff-highlight
die Farbe auf Zeichenebene weiterzuleiten und die Ausgabe dann in weniger (falls erforderlich) zu paginieren, anstatt nur die Standardeinstellung zu verwendenless
.quelle
gitconfig
Optionen erklären ?dsf()
.Das gewünschte Verhalten ist jetzt in git selbst verfügbar (wie in einem Kommentar von naught101 ausgeführt). Um es zu aktivieren, müssen Sie Ihren Pager auf einstellen
Wo
/usr/share/doc/git/contrib/diff-highlight/diff-highlight
befindet sich das Textmarkerskript unter Ubuntu 13.10 (ich habe keine Ahnung, warum es sich in einemdoc
Ordner befindet). Wenn es auf Ihrem System nicht vorhanden ist, versuchen Sie es mitlocate diff-highlight
zu finden. Beachten Sie, dass das Hervorhebungsskript nicht ausführbar ist (zumindest auf meinem Computer), daher ist dies erforderlichperl
.Um den Textmarker immer für die verschiedenen diff-ähnlichen Befehle zu verwenden, fügen Sie Ihrer
~/.gitconfig
Datei einfach Folgendes hinzu :Ich habe dies als neue Antwort hinzugefügt. Der Kommentar von naught101 ist begraben und weil das Setup nicht ganz so trivial ist, wie es sein sollte, und zumindest in der Ubuntu-Version, dass ich die Anweisungen in der README-Datei habe, funktioniert es nicht.
quelle
git add -p
(interaktiver Modus) nicht aktiviert . Ich weiß jedoch nicht, wie das behoben werden kann. Durch einfaches Hinzufügen von add zur Liste bleibt es hängen.git config interactive.diffFilter diff-highlight
diff-highlight
war ich nicht auf meinem Weg, also musste ich es zuerst finden. Details in meiner Antwort unten.Ein Dienstprogramm für bytebasierte Diffs wird seit Version 1.7.8 1 mit offiziellem Git vertrieben . Sie müssen nur herausfinden, wo es auf Ihrem Computer installiert ist, und es aktivieren.
Finden Sie heraus, wo Git installiert ist
/usr/local/opt/git
cd / && pwd -W
, um das Installationsverzeichnis zu finden.ll $(which git)
oderlocate git
sollten Sie helfen.Verknüpfen Sie
diff-highlight
Ihr bin-Verzeichnis, damit Ihr PATH es finden kannAktivieren Sie es in Ihrer Git-Konfiguration
1 Hier ist die Version 1.7.8 , aber seitdem wurden viele Änderungen vorgenommen.
quelle
which git
erfordert, dass es in erster Liniediff-highlight
, installiert es es nicht wirklich , so dass der Symlink-Schritt tatsächlich notwendig ist (zumindest unter macOS). Wenn Sie feststellen, dass dies für Ihre Plattform nicht erforderlich ist, können Sie die Antwort erneut aktualisieren. Inzwischenwhich git
hat in der Regel arbeiten, weil Git tut die Installation vongit
binären irgendwo auf dem Weg..perl
. Die Kompilierung ist trivial: einfachsudo make
imdiff-highlight
Verzeichnis ausführen .Ich benutze
--color-words
Option und es funktioniert gut für mich:quelle
wie @dshepherd sagt :
Befindet
diff-highlight
sich aber in DOC und ist nicht über die Shell erhältlich.Führen
diff-highlight
Sie~/bin
die folgenden Schritte aus, um die Installation in Ihrem Verzeichnis durchzuführen (dies spart Ihre Eingabe):Dann konfigurieren Sie Ihr
.gitconfig
als offizielles Dokument sagt:UPD
Auch können Sie als nächstes spätestens
git
ohne Installation versuchen :Komplexer:
quelle
Emacs verfügt über die Ediff-Patch-Buffer-Funktion, die Ihre Anforderungen erfüllen sollte.
Öffnen Sie die nicht gepatchte Datei in emacs Typ ESC-x, ediff-patch-buffer.
Befolgen Sie die Anweisungen, und Sie sollten einen hervorgehobenen Vergleich der gepatchten und der Originalversion Ihrer Datei sehen.
Gemäß Ihrem Kommentar erhalten Sie im Folgenden eine Bash-Lösung, für die nur dwdiff erforderlich ist:
quelle
colordiff -u <(patch original_file -i patch_file -o -) <(cat original_file)
aber dies wird nur geänderte Zeilen hervorheben, keine Bisse ...dwdiff -c --diff-input diff_file
Diffy
GitLab verwendet Diffy https://github.com/samg/diffy (Ruby), um eine Ausgabe ähnlich GitHub und Diff-Highlight zu erzielen:
Diffy erstellt das Diff selbst mit demselben Algorithmus und Git und unterstützt verschiedene Arten von Ausgaben, einschließlich der von GitLab verwendeten HTML-Ausgabe:
Ausgabe:
Beachten Sie, wie
strong
zu den geänderten Bytes hinzugefügt wurde.quelle
Ja, Vim tut dies einschließlich der Hervorhebung von Text, der innerhalb einer Zeile geändert wurde.
Sehen
:h diff
und:h 08.7
für weitere Informationen, wie man diff - Dateien.Vim verwendet einen ziemlich einfachen Algorithmus zum Hervorheben. Es durchsucht die Zeile nach dem ersten geänderten Zeichen und dann nach dem zuletzt geänderten Zeichen und hebt einfach alle Zeichen zwischen ihnen hervor.
Dies bedeutet, dass Sie nicht mehrere Highlights pro Zeile haben können - viele Designentscheidungen in Vim priorisieren die Effizienz.
quelle
vimdiff file1 file2
zeigt den Unterschied zwischen zwei Dateien zeichenweise an.vimdiff ist ein Diff-Tool, das in vim enthalten ist. (Vim sollte mit der Option + diff kompiliert worden sein, um sicherzugehen, dass Sie dies überprüfen können.
:version
)Sie können es auch von vim aus starten. Siehe
:help diff
für weitere Informationen und Befehle.quelle
vimdiff file.old file.new -c 'FormatCommand diffformat' -c 'w! file.diff.html' -c 'qa!'
.screen -D -m
oder anhängen&>/dev/null
(/ dev / null-Variante erzeugt manchmal seltsame Fehler), wenn Sie nicht möchten, dass das Terminal blinkt) und vim beenden, nachdem die Formatierung abgeschlossen ist, aber es ist reines vimscript und Trotz meiner Optimierungen ist es für große Dateien sehr langsam.Hinweis : Dies ist ein Duplikat dessen, was hier zu finden ist: Wie kann die Diff-Hervorhebung von Git verbessert werden? . Ich poste meine Antwort auch hier, da es für einige Leute hilfreich sein kann, die diesen Thread direkt finden :)
Wie in einigen früheren Antworten gesagt, ist dies nur mit Git-Sachen möglich. Ich poste dies, da die Anweisungen je nach System möglicherweise etwas einfacher zu befolgen sind, dies ähnelt jedoch mehreren anderen Antworten.
Eine Lösung, die sich ausschließlich auf Git und seine Beiträge stützt. Dies erfordert keine zusätzlichen Dateien als die, die mit git geliefert werden . Alle Erklärungen beziehen sich auf Ubuntu (getestet am 18.04LTS) und sollten auf anderen Linux-Systemen ähnlich funktionieren:
Auf meinem System lautet die einzig gültige Antwort:
~/.gitconfig
, um das gewünschte Ergebnis zu erhalten, indem Sie hinzufügen (beachten Sie, dass dies TABS und keine 4 Leerzeichen sind):quelle