Depuis le 24 mai 2020, vous pouvez désormais utiliser l'outil tiers git diffn
(divulgation complète: je l'ai écrit) à cette fin. C'est un wrapper léger git diff
, écrit dans le awk
langage de programmation basé sur des modèles / actions. Voici un exemple de sortie de l'exécution git diffn
:
Voici une démo:
1/3: Démo de git diffn
:
Créez ce fichier:
bonjour_world.c:
#include <stdio.h>
int main()
{
printf("Hello World\n");
return 0;
}
Engagez-le:
git add hello_world.c
git commit -m "add hello_world.c"
Modifiez-le et enregistrez le fichier:
bonjour_world.c:
// Basic hello world example
#include <stdio.h>
int main(int argc, char *argv[])
{
printf("Hello Gabriel\n");
int i = 700;
printf("i = %i\n", i);
return 0;
}
Maintenant, exécutez:
git diff
Voici la sortie de git diff
first à des fins de comparaison:
$ git diff
diff --git a/hello_world.c b/hello_world.c
index e01704a..e971b73 100644
--- a/hello_world.c
+++ b/hello_world.c
@@ -1,8 +1,12 @@
+// Basic hello world example
+
#include <stdio.h>
-int main()
+int main(int argc, char *argv[])
{
- printf("Hello World\n");
-
+ printf("Hello Gabriel\n");
+
+ int i = 700;
+ printf("i = %i\n", i);
return 0;
-}
\ No newline at end of file
+}
Et une capture d'écran pour montrer la couleur. Notez que la section en surbrillance rouge montre simplement des espaces vides (espaces dans ce cas) qui pourraient être supprimés:
Voici maintenant la sortie de git diffn
. Remarquez qu'il montre parfaitement tous les numéros de ligne!
- Les numéros de ligne des lignes supprimées sont sur la gauche et affichent un
-
signe à l'extrême gauche ET à droite du :
pour vous aider à mieux voir - que vos yeux aiment balayer vers le bas à droite des deux points ou vers le bas à l'extrême à gauche de l'écran.
- Les numéros de ligne des lignes ajoutées sont plus à droite et affichent un
+
signe à la fois à l'extrême gauche ET à droite du :
.
- Les numéros de ligne des lignes inchangées affichées pour le contexte sont affichés à la fois pour la gauche (ancien fichier) ET pour la droite (nouveau fichier), séparés par un
,
.
Sortie de git diffn
:
$ git diffn
diff --git a/hello_world.c b/hello_world.c
index e01704a..e971b73 100644
--- a/hello_world.c
+++ b/hello_world.c
@@ -1,8 +1,12 @@
+ 1:+// Basic hello world example
+ 2:+
1, 3: #include <stdio.h>
2, 4:
- 3 :-int main()
+ 5:+int main(int argc, char *argv[])
4, 6: {
- 5 :- printf("Hello World\n");
- 6 :-
+ 7:+ printf("Hello Gabriel\n");
+ 8:+
+ 9:+ int i = 700;
+ 10:+ printf("i = %i\n", i);
7, 11: return 0;
- 8 :-}
\ No newline at end of file
+ 12:+}
Et une capture d'écran pour montrer la couleur. Notez que les deux points ne sont PAS colorés ou stylisés pour correspondre au texte environnant à gauche et à droite. Il s'agit d' un comportement intentionnel et conçu pour agir comme un séparateur visuel entre les numéros de ligne ajoutés à gauche et la git diff
sortie d' origine à droite.
2/3: Qu'est-ce que c'est?
Du haut degit-diffn.sh
:
LA DESCRIPTION:
git-diffn.sh
un remplacement git diff
instantané pour lequel affiche également les numéros de ligne! Utilisez-le exactement comme git diff
, sauf que vous verrez également ces magnifiques numéros de ligne pour vous aider à comprendre vos modifications.
puisqu'il s'agit simplement d'un wrapper léger basé sur le langage awk git diff
, il accepte TOUTES les options et paramètres qui git diff
acceptent. Exemples:
git diffn HEAD~
git diffn HEAD~3..HEAD~2
fonctionne avec tous vos git diff
paramètres de couleur, même si vous utilisez des couleurs personnalisées
Voir ma réponse ici pour savoir comment définir des couleurs de diff personnalisées, ainsi que pour voir une capture d'écran de la sortie de couleur personnalisée à partir de git diffn
: Comment personnaliser la couleur de l'en-tête de diff dans git diff?
Voici quelques exemples de git config
commandes de ma réponse ci-dessus pour définir des git diff
couleurs et des attributs personnalisés (mise en forme du texte):
git config --global color.diff.meta "blue"
git config --global color.diff.old "black red strike"
git config --global color.diff.new "black green italic"
git config --global color.diff.context "yellow bold"
dans git diffn
, la sortie couleur est activée par défaut; si vous souhaitez désactiver la couleur de sortie, vous devez utiliser --no-color
ou --color=never
. Voir man git diff
pour plus de détails. Exemples:
git diffn --color=never HEAD~
git diffn --no-color HEAD~3..HEAD~2
3/3: Installation
- Windows (non testé): cela peut fonctionner dans le terminal bash fourni avec Git pour Windows , mais n'est pas testé. Installez Git pour Windows. Ouvrez le terminal bash fourni avec et essayez de suivre les instructions ci-dessous. J'ai besoin de quelques testeurs qui vont tester cela dans Git pour Windows. Veuillez consulter et répondre ici: https://github.com/git-for-windows/git/issues/2635 .
- Mac (non testé): utilisez le terminal et suivez les instructions ci-dessous. Vous devrez peut-être installer
gawk
. Si oui, essayez ce : brew install gawk
.
- Linux (testé sur Ubuntu 18.04 et fonctionne parfaitement): suivez les instructions du terminal ci-dessous.
Option 1 (ma recommandation): téléchargez tout le dépôt, puis créez un lien symbolique vers le programme afin que vous puissiez facilement recevoir des mises à jour en effectuant une git pull
depuis le dépôt quand vous le souhaitez.
Tout d'abord, cd
à l'endroit où vous souhaitez l'installer. Puis exécutez:
git clone https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles.git
cd eRCaGuy_dotfiles/useful_scripts
mkdir -p ~/bin
ln -si "${PWD}/git-diffn.sh" ~/bin/git-diffn
Terminé! Maintenant, faites simplement la dernière étape ci-dessous!
Option 2 (pour ceux qui veulent juste le fichier 1): ne téléchargez qu'un seul fichier une fois.
mkdir -p ~/bin
cd ~/bin
wget https://raw.githubusercontent.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles/master/useful_scripts/git-diffn.sh
chmod +x git-diffn.sh
mv git-diffn.sh git-diffn
Terminé! Maintenant, faites simplement la dernière étape ci-dessous!
Dernière étape:
Maintenant, fermez et rouvrez votre terminal, ou re-sourcez-le avec . ~/.bashrc
, et vous avez terminé!
git diffn
fonctionnera désormais comme un remplacement exact pour git diff
!
git diff --unified=0 | grep -Po '^\+\+\+ ./\K.*|^@@ -[0-9]+(,[0-9]+)? \+\K[0-9]+(,[0-9]+)?(?= @@)'