web-dev-qa-db-fra.com

"git diff" ne fait rien

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. Celui-ci a été installé via MacPorts et est la version lates (1.7.2.2).

Ce que je vois, c'est que lorsque j'exécute "git diff" depuis mon espace de travail, il se ferme tout 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>

Ce comportement peut être 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?

87
Tom Lianza

La sortie par défaut pour git diff est la liste des modifications qui n'ont pas été validées/ajoutées à l'index. S'il n'y a aucun changement, alors 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 transit pour la prochaine validation). En d'autres termes, les différences sont ce que vous pourriez dire à git d'ajouter à l'index, mais ce n'est toujours pas le cas.

Voir 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 la copie de travail avec l'index
  2. Diff l'index avec HEAD
  3. Différez 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.

102
Douglas

Remarque: à partir de git 1.8.5 ou 1.9, Q4 201 :

Lorsque l'utilisateur tape "git diff " à l'extérieur d'un arbre de travail , pensant qu'il est à l'intérieur d'un, le message d'erreur actuel qui est un simple liner:

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

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

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


Voir:

Clarifier la documentation de "diff --no-index ".
Indiquez que lorsqu'il n'est pas dans un référentiel, --no-index est implicite et deux arguments sont obligatoires.

Clarifier le message d'erreur de diff-no-index pour informer l'utilisateur que CWD n'est pas dans un référentiel et donc deux arguments sont obligatoires.

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

Il 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.

2
Jaanus

Si vous l'utilisez en dehors d'un vrai référentiel ou d'une copie de travail, son comportement est identique au GNU diff. Vous devez donc informer 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.

1
jweyrich

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

0
deFreitas