Vous ne pouvez pas obtenir de numéros de ligne lisibles par l'homme avec git diff
Il n'y a actuellement aucune option pour afficher les numéros de ligne verticalement sur le côté avec git diff
.
Format de diff unifié
Ces informations sont disponibles dans les en-têtes (c) hunk pour chaque changement dans le diff, mais c'est juste au format unifié-diff :
@@ -start,count +start,count @@
L'état d'origine du fichier est représenté par -
, et le nouvel état est représenté par +
(ils ne signifient pas des ajouts et des suppressions dans l'en-tête de morceau. start
Représente le numéro de ligne de départ de chaque version du fichier, et count
représente le nombre de lignes incluses , à partir du point de départ.
Exemple
diff --git a/osx/.gitconfig b/osx/.gitconfig
index 4fd8f04..fcd220c 100644
--- a/osx/.gitconfig
+++ b/osx/.gitconfig
@@ -11,7 +11,7 @@ <== HERE!
[color "branch"]
upstream = cyan
[color "diff"]
- meta = yellow
+ meta = cyan
plain = white dim
old = red bold
new = green bold
L'en-tête du morceau
@@ -11,7 +11,7 @@
indique que la version précédente du fichier commence à la ligne 11 et comprend 7 lignes:
11 [color "branch"]
12 upstream = cyan
13 [color "diff"]
14 - meta = yellow
14 + meta = cyan
15 plain = white dim
16 old = red bold
17 new = green bold
tandis que la prochaine version du fichier commence également à la ligne 11 et comprend également 7 lignes.
Le format de diff unifié n'est pas vraiment destiné à la consommation humaine
Comme vous pouvez probablement le constater, le format diff unifié ne facilite pas la détermination des numéros de ligne (du moins si vous n'êtes pas une machine). Si vous voulez vraiment des numéros de ligne que vous pouvez lire, vous devrez utiliser un outil différent qui les affichera pour vous.
Lecture supplémentaire
git diff --unified=0 | grep -Po '^\+\+\+ ./\K.*|^@@ -[0-9]+(,[0-9]+)? \+\K[0-9]+(,[0-9]+)?(?= @@)'
--unified=0
ou-U0
, cependant.git diffn
, un remplacement instantané (wrapper) pourgit diff
lequel affiche les numéros de ligne et a une compatibilité totale avec toutes les utilisations et options degit diff
: stackoverflow.com/questions/24455377/...Voici deux autres solutions, développant le code d'Andy Talkowski.
Texte brut:
Texte coloré, en supposant que
\033[66m
le format des codes couleur:Le code modifie les lignes qui commencent par
-
et+
à-1:-
et+1:+
, respectivement, et les lignes qui commencent par rienà
(5,6):
. Les numéros sont les numéros de ligne du fichier respectif.la source
git diff
maintient soigneusement l'alignement. Ce code est au-dessus de ma tête pour le moment, seriez-vous prêt à le réparer? En d'autres termes, lorsqu'une ligne dit+240:+
et la ligne suivante dit(241,257):
, vous devez ajouter des espaces supplémentaires à la ligne supérieure pour que son code conserve un alignement et une indentation appropriés avec le code de la ligne inférieure. Peut-être que cela pourrait facilement être fait avec l'impression?printf
.git diffn
. Voir ici: stackoverflow.com/a/61997003/4561887 . Merci @PFudd, pour votre réponse. Je l'ai étudié et utilisé pour apprendre, puis je suis parti de zéro et j'ai écritgit diffn
. Une fois formaté pour pouvoir lire votre code (merci @EdMorton), j'ai pu en apprendre de très bonnes choses qui m'ont aidé.Voici un script qui tente de résoudre ce problème - pas testé avec colère, mais cela semble correct. Il s'appuie sur les enregistrements que git diff produit et utilise awk pour maintenir le nombre de lignes.
la source
Vous pouvez utiliser
git difftool
pour faire la différence avec un éditeur externe qui affichera les numéros de ligne. Voici comment le faire avec vim / vimdiff:Définissez vimdiff comme difftool de git:
Configurez
~/.vimrc
pour afficher automatiquement les numéros de ligne lors de l'utilisation de vimdiff:Exécutez git difftool, qui utilisera vimdiff avec les numéros de ligne:
la source
Un moyen rapide consiste à utiliser
git diff -U0
. Cela définira les lignes de contexte sur 0, ce qui fera correspondre les valeurs @@ aux lignes réellement modifiées. Par défaut, les valeurs @@ incluent 3 lignes de contexte avant / après, ce qui n'est pas pratique pour les humains.Exemple:
Il est difficile de calculer les numéros de ligne des lignes modifiées car la ligne 10 fait référence à la première ligne du contexte avant. Le numéro de ligne réel de la première ligne modifiée est 10 + 3 = 13. Pour calculer le nombre de lignes modifiées, vous devez également soustraire le contexte avant et après: 8-3-3 = 2.
Comme vous pouvez le voir, la définition de context = 0 facilite la lecture des valeurs @@ par les humains. Vous pouvez voir que les lignes modifiées commencent à la ligne 13 et qu'il y a 2 lignes modifiées.
Ce n'est pas parfait, car il ne montre que le numéro de ligne pour chaque bloc. Si vous voulez voir les numéros de ligne pour chaque ligne, utilisez difftool pour un éditeur externe. Voir https://stackoverflow.com/a/50049752
la source
J'aime utiliser
git difftool
avec meld comme difftool. Il est plus facile à regarder quegit diff
, a une belle comparaison d'interface graphique côte à côte et affiche les numéros de ligne de chaque côté.Installer:
Exemple de capture d'écran:
Mise à jour du 24 mai 2020:
Je viens d'écrire au
git diffn
cours des derniers jours pour remplacergit diff
la ligne de commande. Donner un coup de feu. Voir mon autre réponse ici .la source
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égergit diff
, écrit dans leawk
langage de programmation basé sur des modèles / actions. Voici un exemple de sortie de l'exécutiongit diffn
:Voici une démo:
1/3: Démo de
git diffn
:Créez ce fichier:
bonjour_world.c:
Engagez-le:
Modifiez-le et enregistrez le fichier:
bonjour_world.c:
Maintenant, exécutez:
Voici la sortie de
git diff
first à des fins de comparaison: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!-
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.+
signe à la fois à l'extrême gauche ET à droite du:
.,
.Sortie de
git diffn
: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 de
git-diffn.sh
:LA DESCRIPTION:
git-diffn.sh
un remplacement
git diff
instantané pour lequel affiche également les numéros de ligne! Utilisez-le exactement commegit 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 quigit 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éesVoir 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 desgit diff
couleurs et des attributs personnalisés (mise en forme du texte):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
. Voirman git diff
pour plus de détails. Exemples:3/3: Installation
gawk
. Si oui, essayez ce :brew install gawk
.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: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.
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 pourgit diff
!la source
Tu peux essayer
sur le fichier. Il vous montre le validateur, l'identifiant de validation et le numéro de ligne pour chaque ligne du fichier.
la source
git blame
affichera simplement l'état actuel du fichier avec les numéros de ligne.git blame
ne répond en aucun cas à la question; Je suis assez déconcerté par les votes positifs iciTout d'abord, configurez votre outil git diff, par exemple Meld
Ensuite, tirez votre difftool sur un fichier:
N'oubliez pas de définir le numéro de ligne dans les préférences de votre outil de comparaison.
la source