web-dev-qa-db-fra.com

git diff - gérer les longues lignes?

J'exécute git-diff sur un fichier, mais la modification est à la fin d'une longue ligne.

Si j'utilise les touches du curseur pour aller à droite, les codes de couleur sont perdus et, pire encore, les lignes ne s'alignent pas, ce qui complique le suivi du changement.

Existe-t-il un moyen de prévenir ce problème ou simplement de boucler les lignes?

(exécutant git 1.5.5 via mingw32)

225
Peter Boughton

L'affichage de la sortie de git diff est géré par le téléavertisseur que vous utilisez.

Généralement, sous Linux, less serait utilisé.

Vous pouvez dire à git d’utiliser un autre pageur en plaçant le GIT_PAGER variable d'environnement. Si la pagination ne vous dérange pas (par exemple, votre terminal vous permet de revenir en arrière), vous pouvez essayer de définir explicitement GIT_PAGER vider pour l'arrêter à l'aide d'un téléavertisseur. Sous Linux:

$ GIT_PAGER='' git diff

Sans un pager, les lignes seront bouclées.

Si votre terminal ne prend pas en charge la sortie couleur, vous pouvez également désactiver cette option à l'aide de la touche --no-color argument, ou en plaçant une entrée dans la section couleur de votre fichier de configuration git.

$ GIT_PAGER='' git diff --no-color
113
SpoonMeiser

Ou si vous utilisez moins comme téléavertisseur par défaut, tapez simplement -S tout en visualisant le diff pour réactiver l’emballage en moins.

224
someone45

Vous pouvez aussi utiliser git config pour configurer le pager à envelopper.

$ git config core.pager 'less -r' 

Définit les paramètres du pager pour le projet en cours.

$ git config --global core.pager 'less -r' 

Définit le pager globalement pour tous les projets

113
Shoan

Avec tout le mérite de Josh Diehl à n commentaire à cette réponse , j’ai néanmoins l’impression que cela devrait être une réponse à lui-même, aussi en l’ajoutant :

Un moyen de gérer les différences de lignes longues consiste à utiliser un diff orienté Word. Cela peut être fait avec:

git diff --Word-diff

Dans ce cas, vous obtiendrez une sortie diff très différente, qui vous montrera spécifiquement ce qui a changé dans une ligne.

Par exemple, au lieu d’obtenir quelque chose comme ceci:

diff --git a/test-file.txt b/test-file.txt
index 19e6adf..eb6bb81 100644
--- a/test-file.txt
+++ b/test-file.txt
@@ -1 +1 @@
-this is a short line
+this is a slightly longer line

Vous pourriez obtenir quelque chose comme ça:

diff --git a/test-file.txt b/test-file.txt
index 19e6adf..eb6bb81 100644
--- a/test-file.txt
+++ b/test-file.txt
@@ -1 +1 @@
this is a [-short-]{+slightly longer+} line

Ou, avec la colorisation, au lieu de ceci:

result of just <code>git diff</code>

Vous pourriez obtenir ceci:

result of <code>git diff --Word-diff</code>

Maintenant, si vous comparez une très longue ligne, vous pouvez toujours rencontrer des problèmes avec la situation de téléavertisseur que vous avez décrite à l'origine et qui a été traitée, apparemment de manière satisfaisante, dans d'autres réponses. Espérons que cela vous donne un nouvel outil, cependant, pour identifier plus facilement ce qui a changé sur la ligne.

41
lindes

Pour utiliser moins comme pageur et rendre le retour à la ligne permanent, vous pouvez simplement activer l’option pli-long-lignes:

git config --global core.pager 'less -+S'

De cette façon, vous ne devez pas le taper en utilisant moins.

À votre santé

29
Daniel Montezano

Juste googlé jusqu'à celui-ci. GIT_PAGER='less -r' travaille pour moi

19
singingfish

Mac OSX: Aucune des autres réponses, à l'exception du "-S" de45, alors que moins fonctionne, a fonctionné pour moi. Il a fallu ce qui suit pour rendre Word-wrap persistant:

git config --global core.pager 'less -+$LESS -FRX'
18
John Lemberger

Depuis Git 1.5.3 ( Sep 2007 )

une --no-pager l'option est disponible.

git --no-pager diff

Comment empêcher Git Diff d'utiliser un pager?

Exemple

À partir de la version 2.1, le bouclage est la valeur par défaut.

Notes de version de Git v2.1

10
Steven Penny

Huit ans plus tard, je trouve une réponse supérieure, à partir de https: //superuser.com/questions/777617/line-wrapping-less-in-os-x-specally-for-use-with-git-diff :

git config core.pager `fold -w 80 | less`

Maintenant, vous dirigez le git diff par le pli, d’abord, puis sur less: la valeur de hauteur de page réduite est correcte, conservez la coloration syntaxique en surbrillance.

5
Thomson Comer

Vous pouvez simplement diriger la sortie de git diff vers plus:

git diff | more
3
AnonTidbits

Lorsque vous utilisez "git diff" et qu'il affiche plusieurs pages (vous voyez ":" à la fin de la page), dans ce cas, vous pouvez taper "-S" et appuyer sur Entrée. (S doit être en majuscule). il va basculer les longues lignes.

3
Amin

Pas une solution parfaite, mais gitk et git-gui peut à la fois afficher cette information et comporter des barres de défilement.

3
Peter Boughton

Personne ne l'a fait remarquer jusqu'à maintenant. C'est assez simple à retenir et aucune configuration supplémentaire ne doit être faite dans la configuration git

git diff --color | less -R
2
infoclogged

liste la configuration actuelle/par défaut:

  $ git config --global core.pager  
    less -FXRS -x2

puis mettez à jour et laissez de côté le -S comme:

  $ git config --global core.pager 'less -FXR -x2'

-S: les lignes plus longues que la largeur de l'écran sont hachées plutôt que pliées.

1
user5870226