"Git Diff" macht nichts

94

Ich nehme an, dass dies irgendwo ein Konfigurationsfehler ist, aber ich kann nicht herausfinden, wo. Normale Git-Befehle scheinen gut zu funktionieren, aber "Git Diff" macht nichts. Aus Sicherheitsgründen habe ich externe Diff-Tools aus meiner .gitconfig-Datei entfernt. Dies wurde über MacPorts installiert und ist die neueste Version (1.7.2.2).

Was ich sehe ist, dass wenn ich "git diff" von meinem Arbeitsbereich aus starte, es einfach beendet wird und nichts tut.

$ git --version
git version 1.7.2.2
$ git diff
$ 

Wenn ich ein Verzeichnis außerhalb meines Stammarbeitsbereichs sichere, gibt mir die Eingabe von "git diff" Folgendes:

$ git diff
usage: git diff [--no-index] <path> <path>

Dies kann Verhalten erwartet werden, da ich nicht unter einem Git-Repository bin.

Irgendwelche Ideen, was ich tun kann, um dieses Problem zu beheben?

Tom Lianza
quelle
Was lässt Sie denken, dass es etwas zu beheben gibt? Was hast du erwartet?
Rob Kennedy
Hinweis: Die Fehlermeldung bei Verwendung git diff außerhalb eines Repos wird bald deutlicher. Siehe meine Antwort unten
VonC
Beachten Sie, dass Sie, wenn Sie versuchen, eine bestimmte Datei zwischen zwei Commits zu unterscheiden und keine Ausgabe sehen, sicherstellen, dass das Gehäuse im Pfad zur Datei korrekt ist.
Seth Flowers

Antworten:

110

Die Standardausgabe für git diffist die Liste der Änderungen, die nicht festgeschrieben / zum Index hinzugefügt wurden. Wenn es keine Änderungen gibt, gibt es keine Ausgabe.

Git Diff [--Optionen] [-] […]

In diesem Formular werden die Änderungen angezeigt, die Sie in Bezug auf den Index vorgenommen haben (Staging-Bereich für das nächste Commit). Mit anderen Worten, die Unterschiede sind das, was Sie Git sagen könnten , um den Index weiter zu erweitern, aber Sie haben es immer noch nicht.

Weitere Informationen finden Sie in der Dokumentation . Scrollen Sie insbesondere zu den Beispielen und lesen Sie diesen Abschnitt:

$ git diff            # (1)
$ git diff --cached   # (2)
$ git diff HEAD       # (3)
  1. Diff die Arbeitskopie mit dem Index
  2. Diff den Index mit HEAD
  3. Diff die Arbeitskopie mit HEAD

Außerhalb Ihres Arbeitsbereichs weiß Git nicht, was zu unterscheiden ist, daher müssen Sie explizit zwei zu vergleichende Pfade angeben, daher die Verwendungsnachricht.

Douglas
quelle
13
Ich bin mir nicht sicher, ob Ihre Antwort richtig ist, aber es hat mir geholfen, die Antwort zu finden. Vielen Dank und ich werde sie als solche markieren! Die Standardausgabe für git diff ist nicht die Liste der nicht festgeschriebenen Änderungen, sondern die Liste der nicht festgeschriebenen Änderungen, die auch "noch nicht für das nächste Festschreiben bereitgestellt" sind. Der Befehl, der das tut, was ich von "git diff" erwartet hatte, ist also "git diff HEAD".
Tom Lianza
2
Verwenden Sie git diff --cached, um das Bild zu vervollständigen und anzuzeigen, was sich im Index befindet.
Douglas
macht git diff: (index) - (arbeitsverzeichnis) oder umgekehrt: (arbeitsverzeichnis) - (index)?
BKSpurgeon
4

Hinweis: Start von Git 1.8.5 oder 1.9, 4. Quartal 2013 :

Wenn der Benutzer " git diff" außerhalb eines Arbeitsbaums eingibt und denkt, er befindet sich innerhalb eines Baums , wird die aktuelle Fehlermeldung als Einzeiler angezeigt:

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

kann nicht ausreichen, um ihn den Fehler erkennen zu lassen.

Fügen Sie Not a git repositoryder Fehlermeldung " " hinzu, wenn wir in den " --no-index" -Modus gefallen sind, ohne eine explizite Befehlszeilenoption, die uns dazu auffordert.


Sehen:

Klären Sie die Dokumentation für " diff --no-index".
Geben Sie an, dass, wenn Sie sich nicht in einem Repository befinden, dies --no-indeximpliziert ist und zwei Argumente obligatorisch sind.

Klären Sie die Fehlermeldung von diff-no-index, um den Benutzer darüber zu informieren, dass sich CWD nicht in einem Repository befindet. Daher sind zwei Argumente obligatorisch.

To compare two paths outside a working tree:
usage: git diff --no-index <path> <path>
VonC
quelle
2

Es tut nichts, wenn Ihr Arbeitsverzeichnis sauber ist und es keine Unterschiede zum letzten Update gibt. Versuchen Sie, eine Datei zu bearbeiten, und führen Sie dann git diff erneut aus. Anschließend sollte das Diff angezeigt werden.

Jaanus
quelle
1

Wenn Sie es außerhalb eines realen Repositorys oder einer Arbeitskopie verwenden, ist sein Verhalten mit dem GNU-Diff identisch. Sie müssen also die 2 zu vergleichenden Verzeichnisse oder Dateien informieren. Beispiel:

git diff old_dir new_dir.

Wenn es einen Unterschied zwischen ihnen gibt, zeigt Ihnen die Ausgabe wie erwartet.

jweyrich
quelle
0

Nicht in Ihrem Fall, aber möglicherweise, weil die Datei, die Sie übergeben, nicht vorhanden ist

$ git difftool HEAD HEAD^ -- path/that-not-exists

nichts passiert

deFreitas
quelle