9 votes

git diff --no-index mais avec plusieurs fichiers

J'aime vraiment le format de sortie de git diff, et je l'utilise beaucoup comme git diff --no-index pour comparer des fichiers arbitraires non liés à Git. Mais pour autant que je sache, lorsque vous utilisez --no-index, vous ne pouvez fournir qu'une seule paire de fichiers. J'aimerais vraiment pouvoir lui passer plusieurs paires, comme :

git diff --no-index a.new a.old b.new b.old

Et obtenir le genre de résultat que vous obtiendriez en exécutant git diff dans un repo :

diff --git a/a b/a
index e965047..ce01362 100644
--- a/a
+++ b/a
@@ -1 +1 @@
-Hello
+hello
diff --git a/b b/b
index 2b60207..dd7e1c6 100644
--- a/b
+++ b/b
@@ -1 +1 @@
-Goodbye
+goodbye

Y a-t-il un moyen de faire cela avec git diff, ou un outil similaire ?

4voto

Jaap Eldering Points 8835

Depuis git diff --no-index accepte également deux répertoires et les compare, vous pourriez toujours écrire un script enveloppant autour de cela, copiant vos fichiers dans deux répertoires temporaires.

En dehors de cela, je ne connais pas d'outil de comparaison qui accepte plusieurs paires de fichiers à comparer. Même diff n'accepte qu'une seule paire de fichiers, ou un répertoire et une liste de fichiers.

4voto

Michael Points 839

Il s'agit essentiellement de deux versions dépendantes du contexte de l'opération. La réponse de Jaap chacun avec un bonus :

Avant de courir git diff --no-index vous pouvez définir diff.colorMoved dans la configuration de Git. Alternativement, vous pouvez inclure un --color-moved au lieu de la définir globalement.

diff.colorMoved les paramètres utilisent une couleur de ligne différente lorsque des lignes retirées d'un endroit apparaissent ailleurs dans le diff... qu'elles aient été déplacées dans le fichier ou dans un autre fichier, comme dans un refactor.

Séries complètes ou presque complètes

Vous avez des fichiers dans un répertoire, current-version que vous voulez comparer à d'autres fichiers. Si l'ensemble des fichiers auxquels vous voulez les comparer en new-version est presque identique dans son contenu, utilisez simplement la suggestion de Jaap :

git diff --no-index current-version/ new-version/

Fichiers spécifiques à comparer

S'il n'y a qu'une poignée de fichiers dans une version et beaucoup de fichiers dans l'autre, comme ceci,

 current-project
|  (various folders)
|  src
|    (various files)
|    foo.c
|    bar.c
 proposed-replacements
   new-foo.c
   new-bar.c

...vous pouvez essayer de laisser la détection de renommage de Git faire le travail. Je ne sais pas quelle version de Git ajoute le degré de détection des renommages qui est nécessaire pour faire cela (j'utilise la v2.18). De plus, les tests que j'ai effectués portaient sur un ensemble de fichiers assez trivial.

Vous n'avez pas vraiment envie de voir que la majorité des fichiers sont "manquants" en proposed-replacements . Aussi, vous ne voulez pas prendre la peine de donner proposed-replacements Le nom et le chemin d'accès de ces fichiers sont les mêmes que ceux qui figurent dans la base de données de l'UE. current-project Vous les laissez donc là où ils étaient et vous mettez un filtre qui n'inclut que les fichiers renommés et modifiés.

git diff --no-index --diff-filter=RM current-project/ proposed-replacements/

diff --git a/current-project/src/foo.c b/proposed-replacements/new-foo.c
similarity index 65%
rename from current-project/src/foo.c
rename to proposed-replacements/new-foo.c
index dd51990..64445b1 100644
--- a/current-project/src/foo.c
+++ b/proposed-replacements/new-foo.c
@@ -1,4 +1,4 @@
 octopus
 cow
-dog
 tiger
+flamingo

diff --git a/current-project/src/bar.c b/proposed-replacements/new-bar.c
similarity index 87%
rename from current-project/src/bar.c
rename to proposed-replacements/new-bar.c
...

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X