Come faccio a 'git diff' su una determinata directory?


132

git diffesegue effettivamente un diff su tutto il codice sorgente. Come posso farlo su una determinata directory, in modo da poter visualizzare le modifiche sui file sottostanti?


2
stackoverflow.com/a/12123669/1815624 git diff master..yourbranch path/to/folder
CrandellWS

Risposte:


125

Fornisci un percorso (myfolder in questo caso) ed esegui semplicemente:

git diff myfolder/

28
Mi piacerebbe usare git diff -- myfolderper ridurre al minimo l'ambiguità di git. La notazione generale per git diff (e molti comandi git) è git diff [commit-ish] -- [path]dove commit-ish imposta automaticamente HEAD (dove sei ora) e [path]imposta automaticamente la directory root di git, ma può essere qualsiasi cosa relativa alla directory corrente. Senza il --, git indovina cosa intendi, [commit-ish]o [path]. In alcuni casi, questo fa sì che Git dica che la notazione è "ambigua". Se ricordo bene.
L0LN1NJ4,

2
Questo non stampa nulla quando provo il metodo nella risposta e il metodo nel commento.
ray

@ray il che significa che non hai differenze tra l'albero di lavoro e l'ultimo commit
valerij vasilcenko,

3
Per @ray e per i futuri individui che lo vedono, puoi includere i rami tra cui stai cercando di diff git diff master..develop myfolder/. Lo stato di Git ti mostrerà le modifiche se è quello che stai cercando.
BVBA accelera il

2
@ray assicurati di essere nella directory principale. Il percorso sarà relativo alla directory corrente.
Nickofthyme,

59

Se stai confrontando diversi rami, devi usare --per separare una revisione Git da un percorso del filesystem. Ad esempio, con due filiali locali mastere bryan-working:

$ git diff master -- AFolderOfCode/ bryan-working -- AFolderOfCode/

O da una filiale locale a un telecomando:

$ git diff master -- AFolderOfCode/ origin/master -- AFolderOfCode/

29
È necessaria una sola clausola dopo aver elencato entrambi i rami, come in: git diff branch1 branch2 - path / to / dir
emery

4

Dovresti prendere l'abitudine di guardare la documentazione per cose come questa. È molto utile e migliorerà le tue abilità molto rapidamente. Ecco la parte rilevante quando lo faigit help diff

   git diff [options] [--no-index] [--] <path> <path>

I due <path>sono ciò che è necessario modificare nelle directory in questione.


3

Aggiungi Beyond Compare come difftool in Git e aggiungi un alias per diffdir come:

git config --global alias.diffdir = "difftool --dir-diff --tool=bc3 --no-prompt"

Ottieni gitdiff come:

git diffdir 4bc7ba80edf6  7f566710c7

Riferimento: confronta intere directory con gt difftool + Beyond Compare


1
Il segno di uguale sembra essere sbagliato per git 2.17.1. Usa git config --global alias.diffdir = "difftool --dir-diff --tool=bc3 --no-prompt"invece
Mark Schäfer

Si noti che quando si utilizza Beyond Compare per dir diff, è necessario configurarlo per seguire i collegamenti simbolici (in una vista di confronto cartelle -> Regole (icona arbitro) -> Gestione -> seguire i collegamenti simbolici) OPPURE, aggiungere l' --no-symlinksopzione in modo che il comando leggagit difftool --dir-diff --no-symlinks
Ashutosh Jindal,

1

Non solo puoi aggiungere un percorso, ma puoi aggiungere git diff --relativeper ottenere risultati relativi a quella cartella.

git -C a/folder diff --relative

E con Git 2.28 (3 ° trimestre 2020), i comandi della " diff" famiglia hanno imparato a onorare la " diff.relative" variabile di configurazione.

Vedi commit c28ded8 (22 maggio 2020) di Laurent Arnoud ( spk) .
(Unita da Junio ​​C Hamano - gitster- in commit e34df9a , 02 giu 2020)

diff: aggiungi l'opzione di configurazione relative

Firmato-fuori: Laurent Arnoud
Acked-by: Đoàn Trần Công Danh

L' diff.relativeopzione booleana impostata su truemostra solo le modifiche nella directory / valore corrente specificati pathdall'argomento relativedell'opzione e mostra i nomi dei percorsi relativi alla suddetta directory.

Insegna --no-relativea eseguire l'override in precedenza--relative

Aggiungi per la documentazione delle opzioni git-format-patch (1) --relativee--no-relative

La documentazione ora include :

diff.relative:

Se impostato su ' true', ' git diff' non mostra le modifiche al di fuori della directory e mostra i percorsi relativi alla directory corrente.


0

Se si desidera escludere le sottodirectory, è possibile utilizzare

git diff <ref1>..<ref2> -- $(git diff <ref1>..<ref2> --name-only | grep -v /)

0

Per utilizzare Beyond Compare come difftool per la directory diff, ricorda di abilitare seguire i collegamenti simbolici in questo modo:

In una cartella Confronta vistaRegole (icona arbitro):

Inserisci qui la descrizione dell'immagine

E quindi, abilitare seguire i collegamenti simbolici e aggiornare le impostazioni predefinite della sessione:

Inserisci qui la descrizione dell'immagine


O,

impostare l'alias in questo modo:

git config --global alias.diffdir "difftool --dir-diff --tool=bc3 --no-prompt --no-symlinks"

Si noti che in entrambi i casi, tutte le modifiche apportate al lato (sinistro o destro) che si riferiscono all'attuale albero di lavoro vengono conservate.

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.