2010-11-19 8 views
21

Ich mag im Allgemeinen die Verwendung des Pagers in Git, aber für git stash ärgert mich der Pager. Wenn ich git stash list anrufe, möchte ich nicht die drei Zeilen der Ausgabe im Pager angezeigt werden - es zwingt mich, q nur zu drücken, um die Ausgabe wieder verfügbar zu machen, wenn ich den nachfolgenden Befehl git stash pop eintippe.Ausschalten der Pager in Git für den Stash-Befehl nur

Eine Lösung wäre

git --no-pager stash list 

zu verwenden, aber das ist zu viel Typisierung (ich bin faul). Im Anschluss an die man page of git config, habe ich versucht,

git config --global pager.stash false 

aber dies scheint nicht zu tun, was die Dokumentation sagt (eigentlich habe ich nicht bemerkt keine Wirkung). Dann habe ich versucht

git config --global alias.stash "--no-pager stash" 

wieder ohne bemerkbare Wirkung.

Die Konfiguration wird korrekt aktualisiert, zum Beispiel

git config pager.stash 
false 

Es hat einfach keinen Effekt. Was vermisse ich? Und wie kann ich erreichen, dass git stash den Pager nicht verwendet?

+0

Haben Sie eine andere pagerbezogene Konfiguration? Stash benutzt den Pager nicht für mich. – Cascabel

+0

Strike das: der Unterbefehl list paginiert tatsächlich und ignoriert die Konfiguration. – Cascabel

+1

Siehe meine Antwort unten: 'git config --global pager.stash false' funktioniert nicht, wurde ein Fehler in Git 1.7.7.3 und höher behoben. – cbowns

Antwort

9

Es sieht aus wie Stash, und jeder andere nicht eingebaute Befehl (geschrieben als Shell-Skript, anstatt in C) fehlt beim Pager-Konfigurationsschritt. Ich habe eine Notiz an die Git-Mailingliste geschickt, in der ich danach gefragt wurde; Es sieht so aus, als ob es ein bekanntes Problem ist, aber nicht ganz trivial zu beheben.

Der Hauptgrund, dass Ihr Alias ​​keine Auswirkungen hat, ist, dass git automatisch Aliasnamen für integrierte Befehle ignoriert; Die Idee ist, dass Sie niemals einen Befehl unzugänglich machen wollen. Damit das Alias ​​ausgeführt werden kann, müssen Sie etwas anderes als stash nennen.

Ich glaube jedoch, dass einfache Aliase die Umgebung, in der ein git-Befehl ausgeführt wird, nicht beeinflussen dürfen. Dies schließt im Allgemeinen die Optionen ein, die an git selbst übergeben werden. Wenn ich einen Alias ​​wie das Ihre verwenden:

git config alias.foo --no-pager stash 
git foo 
fatal: alias 'foo' changes environment variables 

Wenn Sie das richtig machen wollen, müssten Sie !git --no-pager stash verwenden, so dass es dann eine Subshell laichen und git erneut aufrufen.

Eine andere temporäre Lösung, da es sich um ein Shell-Skript handelt, wäre, libexec/git-core/git-stash direkt zu bearbeiten. Suchen Sie einfach nach der list_stash-Funktion, und fügen Sie die Option --no-pager zu ihrem Aufruf an git log hinzu, oder um das gesamte Skript abzudecken, legen Sie oben fest.

+0

Danke für die Info und um das auf die git Mailingliste zu bringen (ich habe auch die Antwort auf deine Mail gelesen). Bezüglich des Alias: Ich habe auch einen anderen Namen als 'stash' versucht, aber der Effekt war der gleiche. Seltsamerweise habe ich keine Fehlermeldung erhalten (Version 1.7.2.3), daher dachte ich, der Name sei nicht der Grund. Ich werde das Skript nur für den Augenblick patchen. –

+1

@Sven: Haben Sie wirklich mehr als einen Bildschirm im Wert von Stashes aufzulisten? Oder beendet Ihr Pager nach weniger als einem Bildschirm der Ausgabe nicht? – Cascabel

+0

@Sven: Und ich bin nicht sicher, warum Sie diesen Fehler nicht bekommen. Dieser Check wurde vor langer, langer Zeit hinzugefügt (v1.5.3). Der Subshell-Alias ​​('! ...') sollte jedoch auch funktionieren und es sollte vermieden werden, Git selbst zu bearbeiten. – Cascabel

23

Ab 1.7.7.3, git config --global pager.stash false erreicht dies.

7

Alternativ können Sie less beenden konfigurieren, wenn es weniger als ein Wert der Bildschirm Ausgabe:

export LESS='-F' 

Oder verbosely:

export LESS='--quit-if-one-screen' 

Wenn Sie Farben in Ihrem git-Ausgang, Sie‘haben Willst du vielleicht auch die -r Flagge passieren:

export LESS='-F -r' 
+0

Diese Lösung ist bereits in den Kommentaren zu Jefromis Antwort vergraben (irgendwie). Es ist gut, es in einer eigenen Antwort zu haben. –

+3

Funktioniert hier nicht (xterm on pts), weil nach "less" quit nichts mehr von weniger Anzeige übrig ist, es zeichnet die vorherigen Aufforderungen neu. Aber es funktioniert auf dem Begriff "Linux" auf tty1. – lolesque

+0

Ja, auf einigen Systemen/Terminals verschwindet die Ausgabe, weil alles auf "alternate screen" geht und sofort zurückgeschaltet wird :-(Das Hinzufügen von '--no-init' könnte helfen. –

0
stll = "!git --no-pager stash list" 

ist dein Freund.

Verwandte Themen