Come fare in modo che git-diff e git log ignorino i file nuovi ed eliminati?


155

A volte ci sono un paio di file modificati insieme ad alcuni file nuovi, cancellati e / o rinominati. Quando lo faccio git diffo git-logvorrei ometterli, così posso individuare meglio le modifiche.

In realtà, sarebbe meglio elencare i nomi dei file nuovi ed eliminati senza il loro contenuto. Per "vecchio" rinominato in "nuovo", vorrei facoltativamente ottenere la differenza tra "vecchio" e "nuovo".

Risposte:


217

L' --diff-filteropzione funziona con entrambi diffe registro.

Ne uso --diff-filter=Mmolto che limita le uscite diff solo alle modifiche del contenuto.

Per rilevare nomi e copie e utilizzarli nell'output diff, è possibile utilizzare -Me -Crispettivamente, insieme alle opzioni Re Ca --diff-filter.


3
Se usato con git logquesto, lo farà ignorare completamente i commit che aggiungono e / o rimuovono solo i file.
qqx

7
C'è un modo per escludere effettivamente solo un tipo di dati? Qualcosa del genere--diff-filter=!D
Kamil Dziedzic,

24
@Kamil Sì, c'è. Citazione dalla documentazione:Also, these upper-case letters can be downcased to exclude. E.g. --diff-filter=ad excludes added and deleted paths.
LambdaCruiser,

62
  • Documento ufficiale:
--diff-filter=[(A|C|D|M|R|T|U|X|B)…​[*]]

Seleziona solo i file che vengono aggiunti (A), copiati (C), eliminati (D), modificati (M), rinominati (R), che cambiano il loro tipo (ovvero file normale, link simbolico, sottomodulo, ...) (T), sono Unmerged (U), sono Unknown (X) o hanno avuto il loro abbinamento Broken (B). È possibile utilizzare qualsiasi combinazione di caratteri filtro (incluso nessuno).

Quando * (Tutto-o-nessuno) viene aggiunto alla combinazione, tutti i percorsi vengono selezionati se esiste un file che corrisponde ad altri criteri nel confronto; se non esiste alcun file che soddisfi altri criteri, non viene selezionato nulla.

Inoltre, queste lettere maiuscole possono essere declassate per escludere. Ad esempio --diff-filter = ad esclude i percorsi aggiunti ed eliminati.

Esempio: mostra solo i file aggiunti, modificati e modificati, esclude i file eliminati:

git diff --diff-filter=ACM

2
Nota positiva sull'uso delle opzioni di lettere minuscole per escludere i percorsi e le opzioni di lettere maiuscole per includere i percorsi.
stuyam,

-3

AGGIORNAMENTO: La risposta accettata da Charles Bailey è quella corretta; la funzionalità desiderata è già integrata in git.

Lascio qui questa risposta poiché potrebbe fornire idee per cose che non sono integrate in Git.


git diffmostra i file nuovi ed eliminati confrontandoli con /dev/null. Non dovrebbe essere troppo difficile scrivere qualcosa (userei Perl da solo) che cerca /dev/nulle filtra le seguenti righe fino alla successiva diff. Poi git diff ... | the-filter.

I file rinominati sono una questione diversa; Non ho (ancora) una buona risposta a questo.


Va bene, ma in questo modo perderei la possibilità di usare il cercapersone (meno) solo se necessario, no?
maaartinus,

@maaartinus: suppongo di si; Non ci avevo pensato. (Personalmente, ho impostato il mio git cercapersone a "gatto" e l'uso ... | lessin modo esplicito.) Si potrebbe guardare less's -Eo -Fl'opzione (anche se sul mio sistema che non mi permette di vedere l'uscita).
Keith Thompson,

OK, va bene, ma guarda l'altra risposta.
maaartinus,
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.