2010-08-27 4 views
68

Ich vermute, das ist ein Konfigurationsfehler irgendwo, aber ich kann nicht herausfinden, wo. Reguläre Git-Befehle scheinen gut zu funktionieren, aber "git diff" tut nichts. Um sicher zu sein, entfernte ich externe Diff-Tools aus meiner .gitconfig-Datei. Dies wurde über MacPorts installiert und ist die letzte Version (1.7.2.2)."git diff" tut nichts

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

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

Wenn ich ein Verzeichnis nach oben zurück, aus meinem root-Arbeitsbereich „git diff“ gibt mir schreibe dies:

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

Dies kann ein erwartetes Verhalten, da ich bin nicht unter einem Git Repository .

Irgendwelche Ideen, was ich tun kann, um dies zu beheben?

+0

existiert passieren Was macht denken Sie es etwas zu beheben? Was hast du erwartet zu sehen? –

+0

Hinweis: Die Fehlermeldung bei Verwendung von 'git diff' * außerhalb * eines Repos wird in Kürze klarer. Siehe [meine Antwort unten] (http://stackoverflow.com/a/18895460/6309) – VonC

+0

Beachten Sie, dass, wenn Sie versuchen, eine bestimmte Datei zwischen zwei Commits zu differentieren und keine Ausgabe zu sehen, stellen Sie sicher, dass das Gehäuse im Pfad korrekt ist zu der Datei. –

Antwort

91

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

git diff [--options] [-] [...]

Diese Form ist die Änderungen anzuzeigen, die Sie auf den Index relativiert (Staging-Bereich für die nächsten Commit). Mit anderen Worten, die Unterschiede sind, was Sie könnte sagen git, um den Index weiter hinzuzufügen, aber Sie haben immer noch nicht.

Weitere Details finden Sie unter documentation. Insbesondere navigieren Sie zu den Beispielen nach unten 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 der Index mit HEAD
  3. Diff die Arbeitskopie mit HEAD

Außerhalb Ihres Arbeitsbereichs wird git, wie Sie vermuten, nicht wissen, was zu diff ist, daher müssen Sie explizit zwei zu vergleichende Pfade angeben, daher die Verwendungsnachricht.

+9

Ich bin mir nicht sicher, ob deine Antwort richtig ist, aber es hat mir geholfen, die Antwort zu finden, also danke und ich werde es als solche markieren! Die Standardausgabe für git diff ist * not * die Liste nicht festgeschriebener Änderungen, es ist die Liste nicht festgeschriebener Änderungen, die _also_ "noch nicht für das nächste Commit bereitgestellt sind". Also, der Befehl, der tut, was ich "git diff" erwartet hatte, ist tatsächlich "git diff HEAD". –

+2

Um das Bild zu vervollständigen, benutzen Sie git diff --cached um anzuzeigen, was im Index steht. – Douglas

+0

funktioniert git diff: (index) - (Arbeitsverzeichnis) oder umgekehrt: (Arbeitsverzeichnis) - (Index)? – BKSpurgeon

2

Es macht 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, und es sollte dann das diff anzeigen.

1

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

git diff old_dir new_dir.

Wenn ein Unterschied zwischen ihnen besteht, wird die Ausgabe wie erwartet angezeigt.

4

Hinweis: starting git 1.8.5 or 1.9, Q4 2013:

Wenn der Benutzer "git diff" außerhalb eines Arbeits Baum, dachte er in einem ist, die aktuelle Fehlermeldung, die ein Single-Liner:

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

kann nicht ausreichen, um ihn den Fehler zu erkennen.

Add „Not a git repository“, um die Fehlermeldung, wenn wir ohne eine explizite Befehlszeilenoption in den „--no-index“ -Modus fiel uns anweisen, dies zu tun.


See:

Dokumentation Clarify für "diff --no-index".
Geben Sie an, dass --no-index impliziert wird und zwei Argumente obligatorisch sind, wenn sie nicht in einem Repository vorhanden 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 und somit zwei Argumente zwingend erforderlich sind.

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

in Ihrem Fall nicht, aber vielleicht, weil die Datei, die Sie nicht

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

nichts passieren