"Git diff" non fa nulla


94

Presumo che questo sia un errore di configurazione da qualche parte, ma non riesco a capire dove. I normali comandi git sembrano funzionare bene, ma "git diff" non fa nulla. Per sicurezza, ho rimosso gli strumenti per le differenze esterne dal mio file .gitconfig. Questo è stato installato tramite MacPorts ed è la versione più recente (1.7.2.2).

Quello che vedo è che quando eseguo "git diff" dal mio spazio di lavoro, semplicemente esce, senza fare nulla.

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

Se eseguo il backup di una directory, fuori dal mio spazio di lavoro di root, digitando "git diff" mi dà questo:

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

Questo potrebbe essere un comportamento previsto poiché non sono in un repository git.

Qualche idea su cosa posso fare per risolvere questo problema?


Cosa ti fa pensare che ci sia qualcosa da risolvere? Cosa ti aspettavi di vedere?
Rob Kennedy,

Nota: il messaggio di errore quando si utilizza git diff all'esterno di un repository sarà presto più chiaro. Vedi la mia risposta di seguito
VonC

Nota che se stai provando a diff un file specifico tra due commit e non vedi alcun output, assicurati che il maiuscolo sia corretto nel percorso del file.
Seth Flowers,

Risposte:


110

L'output predefinito per git diffè l'elenco delle modifiche che non sono state salvate / aggiunte all'indice. Se non ci sono modifiche, non c'è output.

git diff [--opzioni] [-] […]

Questo modulo serve per visualizzare le modifiche apportate rispetto all'indice (area di staging per il commit successivo). In altre parole, le differenze sono ciò che potresti dire a git di aggiungere ulteriormente all'indice ma non l'hai ancora fatto.

Vedere la documentazione per maggiori dettagli. In particolare, scorri verso il basso fino agli esempi e leggi questa sezione:

$ git diff            # (1)
$ git diff --cached   # (2)
$ git diff HEAD       # (3)
  1. Diffondi la copia di lavoro con l'indice
  2. Diffondi l'indice con HEAD
  3. Diffondi la copia di lavoro con HEAD

Al di fuori del tuo spazio di lavoro, come hai intuito, git non saprà cosa diffondere, quindi devi specificare esplicitamente due percorsi da confrontare, da cui il messaggio di utilizzo.


13
Non sono sicuro che la tua risposta sia corretta, ma mi ha aiutato a trovare la risposta, quindi grazie e la contrassegnerò come tale! L'output predefinito per git diff non è l'elenco delle modifiche non salvate, è l'elenco delle modifiche non salvate che sono anche "non ancora organizzate per il commit successivo". Quindi, il comando che fa quello che mi aspettavo "git diff" è in realtà "git diff HEAD".
Tom Lianza,

2
Per completare l'immagine, usa git diff --cached per mostrare solo cosa c'è nell'indice.
Douglas,

git diff fa: (index) - (directory di lavoro) o viceversa: (directory di lavoro) - (index)?
BKSpurgeon

4

Nota: a partire da git 1.8.5 o 1.9, Q4 2013 :

Quando l'utente digita " git diff" fuori da un albero funzionante , pensando di trovarsi all'interno di uno, il messaggio di errore corrente che è una riga singola:

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

potrebbe non essere sufficiente per fargli capire l'errore.

Aggiungi " Not a git repository" al messaggio di errore quando siamo " --no-index" passati alla modalità senza un'esplicita opzione della riga di comando per istruirci a farlo.


Vedere:

Chiarire la documentazione per " diff --no-index".
Dichiara che quando non è all'interno di un repository, --no-indexè implicito e due argomenti sono obbligatori.

Chiarire il messaggio di errore da diff-no-indexper informare l'utente che CWD non è all'interno di un repository e quindi due argomenti sono obbligatori.

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

2

Non fa nulla se la tua directory di lavoro è pulita e non ci sono differenze rispetto all'ultimo aggiornamento. Prova a modificare un file e quindi esegui di nuovo git diff, che dovrebbe quindi mostrare il diff.


1

Se lo stai usando al di fuori di un repository reale o di una copia di lavoro, il suo comportamento è identico al diff GNU. Quindi è necessario informare le 2 directory o file da confrontare. Esempio:

git diff old_dir new_dir.

Se c'è qualche differenza tra loro, l'output ti mostrerà, come previsto.


0

Non nel tuo caso, ma forse perché il file che passi non esiste

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

non succede niente

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.