Was bewirkt, dass "diff" "git diff" ausführt?

7

Ich möchte wie hier und in der Dokumentation diffbeschrieben verwenden , die ich beim Tippen sehe man diff. Wenn ich jedoch tippe diff, bekomme ich Folgendes:

~ ❯❯❯ diff
usage: git diff --no-index <path> <path>

Wenn ich versuche zu verwenden diff , erhalte ich ähnliche Git-Fehler, weil dies -rqunterstützt wird, man diffaber nicht von git diff:

~ ❯❯❯ diff -rq ~/ ~/Desktop
fatal: invalid diff option/value: -rq

Ich verwende Prezto und Hub, die beide zur Git-Produktivität beitragen, aber keinen Alias erstellen , der, soweit ich das beurteilen kann, zumindest nicht damit beginnt g.

Ich habe ein paar Skripte wie dieses ausgeführt , um zu versuchen, etwas zu finden, das definiert diff, git diffaber ohne Erfolg.

Wie behebe ich das / finde heraus, was es verursacht / überschreibe es?

Bearbeiten

Ran type diff:

diff is a shell function
diff is /usr/bin/diff
Ben Saufley
quelle
Führen Sie type diffdie Ausgabe aus und veröffentlichen Sie sie.
Michael Homer
@ MichaelHomer hinzugefügt. Das sieht für mich richtig aus.
Ben Saufley
Ich weiß nicht, wie Sie prezto sagen, dass er das nicht tun soll, aber im schlimmsten Fall können Sie es einfach heraushacken.
Michael Homer
1
EIGENTLICH! Ich bin gelaufen brew install colordiffund jetzt diffläuft colordiff, was eine tatsächliche diffSache ist.
Ben Saufley

Antworten:

9

Dies scheint darauf zurückzuführen zu sein , dass eine Funktion überschrieben wirddiff . Es kann durchaus eine Möglichkeit geben, dies zu deaktivieren, aber ich weiß nicht, was es ist ( aber Ericbn tut es! ). Sie haben einige Möglichkeiten:

  • /usr/bin/diffoder command diffbeide führen den diffBefehl und nicht die Funktion aus.
  • unset -f diffwird die diffFunktion entfernen . Sie können das in Ihre Shell-Konfiguration einfügen.
  • Wie Sie festgestellt haben, colordiffwird es bei Installation git diffvon der Funktion bevorzugt verwendet .
  • Schließlich können Sie die Funktion aus dieser Datei selbst entfernen oder umbenennen.

Dies scheint wirklich eine Fehlfunktion in Prezto zu sein.

Michael Homer
quelle
1
sicherlich ein gutes Beispiel für die Übel des globalen Geltungsbereichs und der Namenskollisionen
Michael Durrant
2

Ich würde eine solche Funktion verwenden

$ diffit () {
command diff "$@"
}

Eine Funktion über einen Alias, da es Parameter gibt

Verwendungszweck: diffit file1 file2

Sie könnten es in Ihre .bashrc einfügen.
Persönlich behalte ich meine Funktionssammlung in .bash_functionsund in der .bashrcich habe

test -f ~/.bash_functions.sh && . $_
Michael Durrant
quelle
1
Mach es einfach command diff "$@".
Arthur2e5
1

Wie @MichaelHomer antwortete, ist dies eine Prezto-Funktion, die Teil des Dienstprogrammmoduls ist, das unter https://github.com/sorin-ionescu/prezto/tree/master/modules/utility dokumentiert ist . Der Weg, dies zu deaktivieren, ist:

Fügen Sie zpreztorc die folgende Zeile hinzu, um die Diff-Hervorhebung zu deaktivieren:

zstyle ':prezto:module:utility:diff' color 'no'

Oder die Installation colordiffwürde auch dazu führen, dass die benutzerdefinierte Funktion sie anstelle von git diffaufruft, da der Zweck des benutzerdefinierten Prezto darin diffbesteht:

  • diffhebt die Diff-Ausgabe hervor (erfordert colordiffoder Git).
ericbn
quelle