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

93

J'ai quelques référentiels git qui vont ensemble, et un simple fichier batch / bash pour les boucler. Je les boucle souvent avec une commande log pour voir rapidement dans quel état ils se trouvent. Cela fonctionne bien, sauf pour une chose: si le message de validation est plus long que le nombre de caractères, ma console est large (ou comporte plusieurs lignes), git montre la ligne, puis une nouvelle ligne avec (END) et je dois appuyer sur q pour continuer (je suppose que cela fait passer la sortie à travers 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)

C'est plutôt gênant car je dois appuyer sur q plusieurs fois, alors que j'aimerais simplement voir tous ces oneliners en une seule fois.

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

stijn
la source
2
duplication possible de pourquoi je dois frapper q à la fin de git log
Sgoettschkes

Réponses:

155

Git a une option pour désactiver le pager:

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

Si votre téléavertisseur coupe des lignes et que vous souhaitez conserver ce comportement, dirigez-vous vers cut...

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

... ou définissez la variable d'environnement GIT_PAGERavant l'appel:

GIT_PAGER="cut -c 1-${COLUMNS-80}" git --no-pager log --decorate=short --pretty=oneline -n1
toabi
la source
Existe-t-il un moyen de définir --no-pagerla valeur par défaut ou même de créer un raccourci pour cette option en cas de besoin? Je pensais aliasing gitnpà git --no-pager, mais je pense qu'il ya une meilleure solution.
Islam Azab
1
@IslamAzab, vous pouvez utiliser un alias gitpour /usr/bin/git --no-pagerdésactiver le pager pour tous vos appels git.
mrkmg
1
@WarrenP gitn'a pas de pager intégré. Au lieu de cela, il suit la philosophie Unix et utilise tout ce que vous avez $PAGER. gitutilise simplement toujours $PAGERau lieu de le faire de manière aléatoire, contrairement à de nombreux autres outils mal écrits. La seule magie gitest que si elle $LESSn'est pas définie , elle définira la $LESSvaleur FRX. Voir autour de github.com/git/git/blob/master/Documentation/config.txt#L766 pour plus de détails.
Mikko Rantalainen
@WarrenP gitfournit simplement un remplacement GIT_PAGER qui vous permettra de définir une valeur personnalisée à utiliser au lieu de PAGERchaque fois que git a besoin d'une pagination.
Mikko Rantalainen
1
Cas le plus simple qui corrige le comportement juste pour git: export GIT_PAGER = cat
Stragulus
17

Une autre solution pour le problème de la désactivation permanente du pager spécifiquement lors de l'utilisation de la logsous-commande:

  • pour le repo en cours uniquement:
    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, la même chose fonctionne si le téléavertisseur doit être activé ou désactivé pour certaines autres sous-commandes de manière sélective.
Par exemple. pour la branchsous-commande (qui imprime les branches), ce sera

git config pager.branch false


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

  • en utilisant git --no-pagerchaque fois que vous exécutez certaines commandes.
    Parce que, bien possible, vous ne voulez pas le taper à chaque fois.

  • spécifier git --no-pagercomme alias pour git
    Parce que, tout à fait possible, vous voulez éviter la configuration globale implicite OU vous voulez que le pager soit activé dans certains cas.

  • s'appuient sur certaines variables d'environnement comme PAGERou GIT_PAGER.
    Parce que 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 automatiquement définis sur une valeur personnalisée chaque fois que votre nouveau terminal est créé, vous devez modifier l'un des fichiers amorcés par le shell, comme par exemple ~/.bashrc. Ce n'est pas un gros problème. Mais ces fichiers bootstrap sont fréquemment 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 configplutôt que de les mettre par exemple ~/.bashrc.


La solution alternative pour la désactivation pagerde tous les sous - commandes est de spécifier catque le git utilitaire 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 ci-dessous:
"empêcher git diff d'utiliser un pager?"
https://stackoverflow.com/a/6986231/6103242

Il est référencé pour souligner une autre discussion pertinente.

vladZamskoi
la source
3

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

git config --global core.pager '' 
Marchozaur
la source
2

Vous le dirigez vers less -F au cas où --no-pager ne fonctionnerait pas pour vous.

git log --decorate --oneline -5 | less -F
Nick Constantine
la source