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.

nacho4d
la source
duplication possible de Comment empêcher git diff d'utiliser un pager?
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

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
mipadi
la source
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).

friederbluemle
la source
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

Shasak
la source
9
Et si vous vous souciez des couleurs, faites git diff --color | cat(:
xjcl