«Git diff» ne fait rien

94

Je suppose que c'est une erreur de configuration quelque part, mais je ne sais pas où. Les commandes git normales semblent fonctionner correctement, mais "git diff" ne fait rien. Pour être sûr, j'ai supprimé les outils de diff externes de mon fichier .gitconfig. Cela a été installé via MacPorts et est la dernière version (1.7.2.2).

Ce que je vois, c'est que lorsque j'exécute "git diff" depuis mon espace de travail, il se termine simplement, sans rien faire.

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

Si je sauvegarde un répertoire, hors de mon espace de travail racine, taper "git diff" me donne ceci:

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

Cela peut être un comportement attendu car je ne suis pas sous un référentiel git.

Des idées sur ce que je peux faire pour résoudre ce problème?

Tom Lianza
la source
Qu'est-ce qui vous fait penser qu'il y a quelque chose à résoudre? Qu'espériez-vous voir?
Rob Kennedy
Remarque: le message d'erreur lors de l'utilisation en git diff dehors d' un repo sera bientôt plus clair. Voir ma réponse ci
VonC
Notez que si vous essayez de différencier un fichier spécifique entre deux validations et que vous ne voyez aucune sortie, assurez-vous que la casse est correcte dans le chemin du fichier.
Seth Flowers le

Réponses:

110

La sortie par défaut de git diffest la liste des modifications qui n'ont pas été validées / ajoutées à l'index. S'il n'y a aucun changement, il n'y a pas de sortie.

git diff [--options] [-] […]

Ce formulaire permet de visualiser les modifications que vous avez apportées par rapport à l'index (zone de préparation pour le prochain commit). En d'autres termes, les différences sont ce que vous pourriez dire à git d'ajouter davantage à l'index, mais ce n'est toujours pas le cas.

Consultez la documentation pour plus de détails. En particulier, faites défiler les exemples et lisez cette section:

$ git diff            # (1)
$ git diff --cached   # (2)
$ git diff HEAD       # (3)
  1. Différer la copie de travail avec l'index
  2. Différez l'index avec HEAD
  3. Difficulté la copie de travail avec HEAD

En dehors de votre espace de travail, comme vous l'avez deviné, git ne saura pas quoi différencier, vous devez donc spécifier explicitement deux chemins à comparer, d'où le message d'utilisation.

Douglas
la source
13
Je ne suis pas sûr que votre réponse soit correcte, mais cela m'a aidé à trouver la réponse, alors merci et je la marquerai comme telle! La sortie par défaut de git diff n'est pas la liste des modifications non validées, c'est la liste des modifications non validées qui sont également "pas encore préparées pour le prochain commit". Donc, la commande qui fait ce que j'attendais de "git diff" est en fait "git diff HEAD".
Tom Lianza
2
Pour compléter l'image, utilisez git diff --cached pour afficher simplement le contenu de l'index.
Douglas
git diff fait-il: (index) - (répertoire de travail) ou l'inverse: (répertoire de travail) - (index)?
BKSpurgeon
4

Remarque: à partir de git 1.8.5 ou 1.9, T4 2013 :

Lorsque l'utilisateur tape " git diff" en dehors d'un arbre de travail , pensant qu'il en est à l'intérieur, le message d'erreur actuel qui est une seule ligne:

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

peut ne pas être suffisant pour lui faire réaliser l'erreur.

Ajoutez " Not a git repository" au message d'erreur lorsque nous sommes tombés dans le --no-indexmode " " sans option de ligne de commande explicite pour nous demander de le faire.


Voir:

Clarifiez la documentation pour " diff --no-index".
Indiquez que lorsqu'il n'est pas à l'intérieur d'un référentiel, --no-indexest implicite et que deux arguments sont obligatoires.

Clarifiez le message d'erreur de diff-no-indexpour informer l'utilisateur que CWD n'est pas à l'intérieur d'un référentiel et que deux arguments sont donc obligatoires.

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

Cela ne fait rien si votre répertoire de travail est propre et qu'il n'y a aucune différence par rapport à la dernière mise à jour. Essayez de modifier un fichier, puis exécutez à nouveau git diff, et il devrait alors afficher le diff.

Jaanus
la source
1

Si vous l'utilisez en dehors d'un référentiel réel ou d'une copie de travail, son comportement est identique à celui du diff GNU. Vous devez donc renseigner les 2 répertoires ou fichiers à comparer. Exemple:

git diff old_dir new_dir.

S'il y a une différence entre eux, la sortie vous montrera, comme prévu.

Jweyrich
la source
0

Pas dans votre cas, mais peut-être parce que le fichier que vous passez n'existe pas

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

rien n'arrive

deFreitas
la source