Comment faire écrire à git diff sur stdout?


93

Par défaut, git diffimprime toutes les +-lignes sur la sortie standard, mais j'ai une machine (devian) (que je connecte via ssh) où git diffme conduit à un éditeur (dont je ne sais pas lequel est) et je dois appuyer sur qpour continuer.

J'ai checker git config et ça ressemble à:

$ git config --list
user.name=XXX
user.email=XXX@XXX
color.ui=false
difftool.prompt=false
mergetool.prompt=false
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
remote.origin.url=XXX
branch.master.remote=origin
branch.master.merge=refs/heads/master
$ git config --global --list
user.name=XXX
user.email=XXX@XXX
color.ui=false
difftool.prompt=false
mergetool.prompt=false
$ git config --system --list
'/etc/gitconfig': No such file or directory

Y a-t-il un endroit qui me manque? Peut-être que l'outil inconnu est une solution de secours ou quelque chose parce que je manque quelque chose à ma machine? Toute aide est appréciée. Merci.


Réponses:


167

Par défaut, Git envoie sa sortie diff (et généralement toute sortie qui peut être plus qu'un écran) au pager du système , qui est un utilitaire qui n'imprime qu'un seul écran de sortie à la fois. Si vous souhaitez désactiver le pager lorsque vous exécutez une commande, passez --no-pagerà Git:

$ git --no-pager <subcommand> <options>

Cela peut être exécuté pour n'importe quelle commande Git.

Si vous souhaitez le désactiver par défaut pour diff uniquement , vous pouvez définir le pager de diff caten exécutant:

$ git config pager.diff false

Si vous souhaitez le désactiver par défaut pour toutes les commandes , vous pouvez définir le pager Git caten exécutant:

$ git config --global core.pager cat

Je ne savais pas pour le téléavertisseur. git config --global core.pager catl'a fait!. Merci :)
nacho4d

4
@aaronbauman: L'avez-vous passé à git( pas à la sous-commande)?
mipadi

Je vois, "git --no-pager diff" est différent de "git diff --no-pager". Merci pour la clarification
aaronbauman

1
Même chose pour git branch, par exemplegit config pager.branch false
dinjas

30

La core.pagervaleur suivante utilise less, qui imprime sur stdout, et possède également une fonctionnalité de pagineur (si nécessaire), permettant le défilement vers le haut et vers le bas (contrairement à cat):

$ git config --global core.pager "less -FRSX"

Il se ferme immédiatement si le diff tient sur le premier écran ( -F), génère des caractères de contrôle bruts ( -R), coupe les longues lignes plutôt que wrapping ( -S), et n'utilise pas les chaînes termcap init / deinit ( -X).


1
Merci .. Je cherchais cette option partout sur Internet :)
obai

Celui-ci est ce que je veux
user3595632

20

Vous pouvez également simplement utiliser catpour n'importe quelle gitcommande si vous ne vous souciez pas des couleurs.

Donc git diff | catpour votre cas.

Edit: comme indiqué dans les commentaires si vous vous souciez des couleurs, utilisez:

git diff --color | cat


9
Et si vous vous souciez des couleurs, faites git diff --color | cat(:
xjcl
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.