Comment comparer deux fichiers qui ne sont pas dans le dépôt en utilisant git

114

Je voudrais comparer deux fichiers css qui ne sont dans aucun référentiel git. Existe-t-il une telle fonctionnalité dans git?

Cédric Reichenbach
la source
Et si je voulais utiliser, par exemple, le --patiencedrapeau? Connaissez-vous un diff (1) qui peut faire cela?
SamB
Vous devriez accepter la réponse de Kyle Burton.
BrodieG

Réponses:

214

gitLe diff est plus fonctionnel que le standard unix diff. Je veux souvent faire cela et comme cette question occupe une place importante sur Google, je veux que cette réponse apparaisse.

Cette question: comment l'utiliser en git diff --color-wordsdehors d'un référentiel Git?

Montre comment utiliser git pour différencier les fichiers dont au moins l'un d'entre eux n'est pas dans le référentiel en utilisant --no-index:

git diff --no-index file1.txt file2.txt

Peu importe lequel est suivi par git et qui ne l'est pas - l'un ou les deux peuvent être non suivis, par exemple:

$ date > x
$ sleep 2
$ date > y
$ git diff --color-words --no-index x y
diff --git a/x b/y
index 6b10c7c..70f036c 100644
--- a/x
+++ a/y
@@ -1 + 1 @@
Wed Jun 10 10:57:45|10:57:47 EDT 2013

La couleur ne peut pas être affichée ici, j'ai donc séparé les modifications avec un tuyau dans l'exemple.

Kyle Burton
la source
14
Si vous vouliez ce comportement par défaut, vous pouvez ajouter un alias à votre .bashrcfichier (ou ce que vous utilisez):alias diff="git diff --no-index"
contre-être le
1
FYI: Sur Git pour Windows, il y avait un bogue (# 2123) que "--no-index" n'était pas respecté. Cela a été corrigé dans Git pour Windows v2.21.0 (26 février 2019).
StackzOfZtuff
Que signifie la ligne «index 6b10c7c..70f036c 100644»? Je compare 2 binaires, ils diffèrent, mais c'est la seule ligne avec une différence ...
Lukas Salich
salut @LukasSalich il semble que ce format de ligne pourrait être documenté par git (par exemple: git-scm.com/docs/diff-format ) git's diff n'essaye pas de diff des binaires afaik, donc je suppose que cette ligne signifie qu'ils diffèrent , les deux SHA où une modification a été identifiée, puis les autorisations du fichier.
Kyle Burton
3

diff -u

donnera une sortie de contexte unifiée similaire au diff de git.

James
la source
1
Cependant, il ne fait pas une belle coloration ou n'utilise pas de téléavertisseur.
Xiong Chiamiov
Il ne permet pas non plus un joli mot diff, ( git diff --word-diff).
Stefan van den Akker
0

Utilisez simplement la commande diff:

diff file1.ext file2.ext
Edwardmp
la source
2
Hmkay, j'ai essayé cela mais à mon avis, la sortie était tout simplement absurde ... Peut-être que j'avais tort ...
Cedric Reichenbach
vous pouvez exécuter un outil graphique qui fournira une meilleure vue, comme gvimdiff, kompare ou similaire
Eugene Sajine