182 votes

Comment faire en sorte que le journal git ne demande pas de continuer ?

J'ai quelques dépôts git qui vont ensemble, et un simple fichier batch/bash pour les parcourir en boucle. Je les parcours souvent avec une commande log pour voir rapidement dans quel état ils sont. Cela fonctionne bien, sauf pour une chose : si le message de commit est plus long que le nombre de caractères de ma console (ou a plusieurs lignes), git affiche la ligne, puis une nouvelle ligne avec (END) et je dois appuyer sur q pour continuer (je suppose qu'il achemine la sortie par l'intermédiaire de plus ou quelque chose comme ça). Exemple :

> gitloop . "git log --decorate=short --pretty=oneline -n1"
18629ae238e9d5832cb3535ec88274173337a501 (HEAD, origin/master, master) short log

625fb891b9b0b8648459b07ace662ae3b7773c7f (HEAD, origin/master, origin/HEAD, master) short log

dc0838118266ba8570ea338c1faddfe8af0387bb (HEAD, origin/work, origin/master, work, master) oops loooooooooooooong log
-(END)

Cela n'est pas très pratique, car je dois appuyer sur q alors que j'aimerais voir tous ces oneliners en une seule fois.

Comment puis-je désactiver ce comportement (de préférence en conservant le format du journal) ?

282voto

toabi Points 1050

Git dispose d'une option permettant de désactiver le pager :

git --no-pager log --decorate=short --pretty=oneline -n1

Si votre pager coupe les lignes et que vous souhaitez conserver ce comportement, vous pouvez soit ajouter un tuyau à cut ...

git --no-pager log --decorate=short --pretty=oneline -n1 | cut -c 1-$COLUMNS

...ou définir la variable d'environnement GIT_PAGER avant l'invocation :

GIT_PAGER="cut -c 1-${COLUMNS-80}" git log --decorate=short --pretty=oneline -n1

54voto

vladZamskoi Points 457

Une autre solution au problème de la désactivation permanente des téléavertisseur en particulier lors de l'utilisation de log sous-commande :

  • pour la version actuelle seulement :
    git config pager.log false

  • pour votre installation git (c'est-à-dire tous les dépôts sur votre machine) :
    git config --global pager.log false

Comme vous pouvez le deviner, il en va de même si téléavertisseur est nécessaire pour être sur o éteint pour certaines autres sous-commandes de manière sélective.
Par exemple, pour branch (qui imprime les branches), la sous-commande sera

git config pager.branch false


La solution proposée est sans doute plus élégante que les solutions suivantes

  • en utilisant git --no-pager à chaque fois que vous exécutez une certaine commande.
    Parce que, très probablement, vous ne voulez pas le taper à chaque fois.

  • spécifiant git --no-pager comme alias de git
    Parce que, très probablement, vous voulez éviter implicite configuration globale OU vous voulez téléavertisseur doit être activée dans certains cas.

  • s'appuient sur certaines variables d'environnement telles que PAGER o GIT_PAGER .
    Pour ce faire, vous devez vous assurer qu'ils sont définis dans votre session de terminal actuelle. Et, si vous voulez qu'ils soient définis automatiquement à une valeur personnalisée à chaque fois que votre nouveau terminal est créé, vous devez modifier l'un des fichiers d'amorçage du shell, comme par exemple ~/.bashrc . Ce n'est pas un gros problème. Mais ces fichiers amorcés sont souvent modifiés par d'autres applications et contiennent un tas d'autres choses, pas seulement celles utilisées par Git. Donc, en théorie, il est préférable de spécifier les paramètres liés à Git en utilisant git config plutôt que de les mettre par exemple dans ~/.bashrc .


La solution alternative pour désactiver pager para toutes les sous-commandes est de spécifier cat comme l'utilitaire que git utilisera pour la pagination :

  • git config core.pager cat OU
  • git config --global core.pager cat

Ma réponse est en quelque sorte une reformulation de celle qui suit :
"empêcher git diff d'utiliser un pager ?"
https://stackoverflow.com/a/6986231/6103242

Il s'agit d'une référence pour souligner une autre discussion pertinente.

9voto

marchozaur Points 55

Désactive le téléavertisseur pour toutes les commandes :

git config --global core.pager ''

3voto

Nick Constantine Points 334

Vous l'acheminez vers less -F en cas --no-pager ne fonctionne pas pour vous.

git log --decorate --oneline -5 | less -F

-F signifie que less se comportera comme --no-pager si la sortie tient sur un seul écran, et devient un pager dans le cas contraire.

3voto

davesave Points 446
export PAGER=cat

a fonctionné pour moi

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X