Ich mag die Ausgabeformatierung von git diff
. Die Farbe und die +
/ -
Darstellung von Änderungen zwischen Zeilen ist leichter zu lesen als GNU diff.
Ich kann git diff
mit --no-index
Flag außerhalb eines Git Repo laufen und es funktioniert gut. Es scheint jedoch die --exclude
Option zum Ausschließen von Dateien oder Unterverzeichnissen von einem Rekursiv zu fehlen diff
.
Gibt es eine Möglichkeit, das Beste aus beiden Welten zu bekommen? (Farboptionen und +
/ -
Format git diff
und --exclude
Option von GNU diff).
Ich habe damit experimentiert colordiff
, aber ich bevorzuge immer noch das Ausgabeformat vongit diff
newtext
in, um das Blau für Ergänzungen grün zu machen/etc/colordiff
. Ich denke, Git verwendet Grün?Antworten:
Ich weiß nicht, wie man Farbe macht, aber das macht
+/-
eher das als<
und>
.quelle
diff -u file1 file2 | tig
.colordiff
von Ihrem apt / yum / pacman-Repository und verwenden Sie es.colordiff
: docs.aws.amazon.com/AWSEC2/latest/UserGuide/…colordiff
können Sievim
durch Definieren auch Farbe erhaltencdiff() { diff -u $@ | vim -R -; }
.Sie können auch verwenden
git diff --no-index -- A B
(über Manpage ).quelle
A
undB
unterscheiden sich im Vergleich zu jedem anderen statt , wo jede Datei auf ihre jeweils letzte Revision geändert relativ ist.git diff --no-index
ist großartig, aber wie das OP hervorhob, fehlt ihm die--exclude
Flagge, so dass es oft von sehr begrenztem Nutzen ist.Installieren Sie colordiff .
Aktualisieren Sie Ihre ~ / .colordiffrc (kopieren Sie ggf. zuerst / etc / colordiffrc):
Verwenden Sie diese Option
colordiff -u file1 file2
für zwei Dateien odercolordiff -ruN path1 path2
zum rekursiven Vergleichen von Pfaden.Es ist nicht genau das gleiche, aber es ist sehr nah.
quelle
Dies ist, was ich vorschlage und es ist ziemlich nah
colordiff
: Sie müssen dies installierenbrew install colordiff
auf meinem Mac.port install colordiff
auf einigen Macs.sudo apt-get install colordiff
auf Debian oder Ubuntu-R
: Dies weist Less an, Farben anstelle der Rohcodes anzuzeigen.Ich habe es letztendlich verwendet,
-w
weil ich keine Leerzeichenunterschiede sehen wollte.Bearbeiten: Wie von @Ciprian Tomoiaga im Kommentar vorgeschlagen, können Sie dies zu einer Funktion machen und auch in Ihre
~/.bashrc
Datei einfügen .quelle
function gdiff () { diff -u $@ | colordiff | less -R; }
GNU
diff
hat--color
seit Version 3.4 Ende 2016 eine Option gemäß dieser Antwort auf der Unix SE. Das nebenbei-u
sollte ausreichen, um die Ausgabe vongit diff
:diff -u --color=always file1 file2 | less -r
--color
Mussalways
bei Verwendung in einem Rohr verwendet werden,auto
schaltet die Farbe in Rohren aus.Ich habe dies nur mit Git Bash unter Windows versucht, wo
less -R
nur die erste Zeile eines Stücks eingefärbt wurde.less -r
hat es für mich in diesem Fall behoben.quelle
Mit nur
bash
,diff
,tput
, undless
können wir den Ausgang eng annäherngit diff
. Aufgrund der Kurzsichtigkeit derdiff
Programmierer wird es jedoch einige bemerkenswerte Unterschiede geben .Fügen Sie die folgende Bash-Funktionsdefinition in eine Datei ein, die automatisch von Ihrem Benutzerkonto bezogen wird, und Sie können über die Befehlszeile auf die Funktion zugreifen:
Diese Funktion funktioniert wie folgt:
diff
Wird mit verschiedenen Formatierungsoptionen aufgerufen, um festzulegen, wie Änderungen in den Dateien angezeigt werden.tput
wird verwendet, um ANSI-Farbcodes in diese Formatierungsoptionen einzufügen. Beachten Sie, dass bei Nicht-ANSI - Terminals verwenden, können Sie ersetzen müssentput setaf
mittput setf
.diff
wird in geleitetless
.-R
ermöglicht die Beibehaltung von ANSI-Farben.-X
verhindert, dassless
der Bildschirm beim Verlassen gelöscht wird.-F
verhindert, dass esless
als Pager fungiert, wenn die Ausgabe in einen Bildschirm passt.@full
, zeigt die Funktion alle unveränderten Zeilen zusätzlich zu den hinzugefügten und entfernten Zeilen an.Beachten Sie die folgenden Unterschiede zwischen diesem Ansatz und
git diff
:git diff
meldet drei Kontextzeilen, die jede Änderung umgeben. Leiderdiff
scheint sich zu beschweren und zu beenden, wenn Sie die Anzahl der Kontextzeilen angeben und gleichzeitig Formatierungsoptionen angeben möchten. (Zumindest in Mac OS X Yosemite). Dankediff
Programmierer. Daher können Sie entweder keine Kontextzeilen für jede Änderung anfordern, was das Standardverhalten ist, oder Sie können anfordern, dass alle unveränderten Zeilen in der Datei ebenfalls gemeldet werden, indem Sie angeben@full
als ersten Parameter angeben.git diff
, unterscheiden sich auch die von dieser Funktion gemeldeten Zeilennummern von den vongit diff
.git diff
geht besser damit um, über seine Kontextlinien.diff
Wenn Sie möchten, können Sie versuchen, verschiedene Optionen zu übergeben, um besser mit Leerzeichen umzugehen.quelle
Sie suchen
colordiff
:quelle
Platzieren Sie dies in Ihrem
.bashrc
oder.zshrc
:diff() { git diff --no-index "$1" "$2" | colordiff; }
Anforderungen:
git
undcolordiff
sollte vorher installiert werden.Verwendung :
diff file1 file2
Beispiel: für $
diff .tmux.conf .zshrc.pre-oh-my-zsh
quelle
Die andere Möglichkeit besteht darin, dies von außerhalb des Repositorys zu tun, damit git weiß, dass es zwischen Dateien unterschiedlich ist. z.B. eine Shell-Funktion wie:
quelle
Verwenden Sie colordiff :
Installation:
Verwendung:
Gibt genau den gleichen Unterschied wie gezeigt
git diff
.quelle
Wenn Sie nicht haben
colordiff
odergit diff
, können Sie Farbe durch bekommenvim
.oder einfach
quelle
Da Fledermaus eine schöne Färbung hat, habe ich getestet, ob das funktioniert
diff
und überraschenderweise hat es sehr gut funktioniert.$ diff file1 file2 | bat
oder$ diff -u file1 file2 | bat
Ich nehme an, Sie könnten eine Funktion wie diese unten effizienter gestalten:
quelle
Getestet in Debian 9
diff -u --color=always file1 file2
quelle
Ich denke die Konfigurationseinstellung:
kombiniert mit der
--relative=<path>
Option "diff" würde das tun, was Sie wollten. Hast du versucht ?quelle
git
. Er fragte nach dendiff
Programmoptionen