Comment puis-je «git diff» sur un certain répertoire?


132

git diffexécute en fait un diff sur tout le code source. Comment faire cela sur un certain répertoire, afin que je puisse voir les modifications sur les fichiers en dessous?


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

Réponses:


126

Fournissez un chemin (myfolder dans ce cas) et exécutez simplement:

git diff myfolder/

28
Je voudrais utiliser git diff -- myfolderpour minimiser l'ambiguïté de git. La notation générale pour git diff (et de nombreuses commandes git) est git diff [commit-ish] -- [path]où commit-ish prend par défaut HEAD (où vous en êtes maintenant) et par [path]défaut le répertoire racine de git, mais peut être n'importe quoi par rapport à votre répertoire actuel. Sans le --, git devinera ce que vous voulez dire, [commit-ish]ou [path]. Dans certains cas, cela amène git à dire que la notation est «ambiguë». Si je me souviens bien.
L0LN1NJ4

2
Cela n'imprime rien lorsque j'essaye la méthode dans la réponse et la méthode dans le commentaire.
ray

@ray, ce qui signifie que vous n'avez aucune différence entre l'arbre de travail et le dernier commit
valerij vasilcenko

3
Pour @ray et les futurs individus qui voient cela, vous pouvez inclure les branches entre git diff master..develop myfolder/lesquelles vous essayez de faire des différences, comme @CrandellWS l'a dit dans le commentaire sur la question d'origine. Le statut Git vous montrera les modifications si c'est ce que vous recherchez.
BVBA Accélérer le

2
@ray assurez-vous que vous vous trouvez dans le répertoire racine. Le chemin sera relatif à votre répertoire actuel.
Nickofthyme

59

Si vous comparez différentes branches, vous devez utiliser --pour séparer une révision Git d'un chemin de système de fichiers. Par exemple, avec deux succursales locales masteret bryan-working:

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

Ou d'une succursale locale à une télécommande:

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

29
Une seule clause - est nécessaire après avoir répertorié les deux branches, comme dans: git diff branch1 branch2 - path / to / dir
emery

4

Vous devriez prendre l'habitude de consulter la documentation pour des trucs comme ça. C'est très utile et améliorera vos compétences très rapidement. Voici la partie pertinente lorsque vous faitesgit help diff

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

Les deux <path>sont ce dont vous avez besoin pour changer les répertoires en question.


3

Ajoutez Beyond Compare comme outil de difftool dans Git et ajoutez un alias pour diffdir comme:

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

Obtenez le gitdiff comme:

git diffdir 4bc7ba80edf6  7f566710c7

Référence: Comparez des répertoires entiers avec difftool + Beyond Compare


1
Le signe égal semble être faux pour git 2.17.1. Utiliser à la git config --global alias.diffdir = "difftool --dir-diff --tool=bc3 --no-prompt"place
Mark Schäfer

Notez que lorsque vous utilisez Beyond Compare pour dir diff, vous devez soit le configurer pour suivre les liens symboliques (Dans une vue de comparaison de dossier -> Règles (icône d'arbitre) -> Gestion -> suivre les liens symboliques) OU, ajouter l' --no-symlinksoption pour que la commande se litgit difftool --dir-diff --no-symlinks
Ashutosh Jindal

1

Non seulement vous pouvez ajouter un chemin, mais vous pouvez ajouter git diff --relativepour obtenir un résultat relatif à ce dossier.

git -C a/folder diff --relative

Et avec Git 2.28 (Q3 2020), les commandes de la difffamille " " ont appris à respecter la diff.relativevariable de configuration " ".

Voir commit c28ded8 (22 mai 2020) de Laurent Arnoud ( spk) .
(Fusionné par Junio ​​C Hamano - gitster- dans commit e34df9a , 02 juin 2020)

diff: ajouter une option de configuration relative

Signé par: Laurent Arnoud
Reconnu par: Đoàn Trần Công Danh

L' diff.relativeoption booléenne définie sur trueaffiche uniquement les changements dans le répertoire courant / la valeur spécifiée par l' pathargument de l' relativeoption et affiche les chemins relatifs au répertoire susmentionné.

Apprenez --no-relativeà remplacer plus tôt--relative

Ajouter pour la documentation des options git-format-patch (1) --relativeet--no-relative

La documentation comprend désormais :

diff.relative:

S'il est défini sur « true», « git diff» n'affiche pas les modifications en dehors du répertoire et affiche les noms de chemin relatifs au répertoire courant.


0

Si vous souhaitez exclure les sous-répertoires, vous pouvez utiliser

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

0

Pour utiliser Beyond Compare comme outil de comparaison pour les différences de répertoires, n'oubliez pas d'activer les liens symboliques comme suit:

Dans une vue de comparaison de dossierRègles (icône d'arbitre):

Entrez la description de l'image ici

Et puis, activez les liens symboliques suivants et mettez à jour les paramètres de session par défaut:

Entrez la description de l'image ici


OU,

configurez l'alias comme ceci:

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

Notez que dans les deux cas, toutes les modifications apportées au côté (gauche ou droit) faisant référence à l'arbre de travail actuel sont conservées.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.