2010-11-19 18 views
21

Generalnie lubię używać pagera w git, ale dla git stash denerwuje mnie pager. Dzwoniąc pod numer git stash list, nie chcę pokazywać trzech linii wyjściowych w pagera - zmusza mnie to do naciśnięcia q tylko po to, aby ponownie wydać dane niedostępne podczas wpisywania poniższej komendy git stash pop.Wyłączanie pagera w git tylko dla polecenia ukrywania

Jednym rozwiązaniem byłoby wykorzystanie

git --no-pager stash list 

ale to za dużo pisania (jestem leniwy). Po man page of git config, próbowałem

git config --global pager.stash false 

ale to nie wydaje się, aby robić to, co mówi dokumentacja (faktycznie, nie zauważyłam żadnego efektu). Następnie ponownie wypróbowałem ponownie, bez żadnego zauważalnego efektu.

Konfiguracja zostanie odpowiednio zaktualizowana, na przykład

git config pager.stash 
false 

To po prostu nie ma żadnego wpływu. czego mi brakuje? I jak mogę osiągnąć, że git stash nie korzysta z pagera?

+0

Czy masz inną konfigurację powiązaną z pagerem? Skrytka nie używa mojego pagera. – Cascabel

+0

Powoduje, że: podkomenda listy rzeczywiście stroni i ignoruje konfigurację. – Cascabel

+1

Zobacz moją odpowiedź poniżej: 'git config --global pager.stash false' nie działa było naprawione w git 1.7.7.3 i nowszych. – cbowns

Odpowiedz

9

Wygląda na to, że skrytka i każda inna niezbudowana komenda (napisana jako skrypt powłoki, a nie C) pomija krok konfiguracji pager'a. Wysłałem notatkę na listę dyskusyjną git pytając o to; wygląda na to, że jest to znany problem, ale nie do końca banalny.

Głównym powodem, dla którego nie widzisz efektu ze swojego aliasu jest to, że git w milczeniu ignoruje aliasy dla wbudowanych poleceń; chodzi o to, że nigdy nie chcesz, aby polecenie było niedostępne. Aby alias mógł być uruchamiany, musisz nadać mu nazwę inną niż stash.

Uważam jednak, że proste aliasy nie mogą wpływać na środowisko, w którym uruchamiane jest polecenie git, co zwykle obejmuje opcje przekazane do samej git. Jeśli używam aliasu jak Twoja:

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

Jeśli chcesz to zrobić prawidłowo, trzeba by użyć !git --no-pager stash, tak że będzie ona tarło podpowłoce i reinvoke git.

Inną tymczasową poprawką, ponieważ jest to skrypt powłoki, będzie bezpośrednio edytować libexec/git-core/git-stash. Po prostu znajdź funkcję list_stash i dodaj opcję --no-pager do swojego połączenia z numerem git log lub aby pokryć cały skrypt, ustaw u góry.

+0

Dzięki za informację i za umieszczenie tego na liście mailowej git (przeczytałem również odpowiedź na twoją pocztę). Odnośnie aliasu: Próbowałem też innej nazwy niż 'stash', ale efekt był taki sam. O dziwo, nie otrzymałem komunikatu o błędzie (wersja 1.7.2.3), więc uznałem, że nazwa nie jest powodem. Po prostu załatwię skrypt na razie. –

+1

@Sven: Czy masz na liście więcej niż jednego ekranu? Czy twój pager nie rzuca palenia po mniej niż jednym ekranie wyjściowym? – Cascabel

+0

@Sven: I nie jestem pewien, dlaczego nie dostałeś tego błędu. Ta kontrola została dodana dawno, dawno temu (v1.5.3). Jednak alias podpowłoki ('! ...') również powinien działać dobrze i uniknąć konieczności edytowania samego gita. – Cascabel

23

Od 1.7.7.3, git config --global pager.stash false osiąga to.

7

Alternatywnie można skonfigurować less aby wyjść jeśli jest wart mniej niż jeden ekran w produkcji:

export LESS='-F' 

Albo --long:

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

Jeśli masz kolory w wyjściu git, ty” Prawdopodobnie również chcesz przekazać flagę -r:

export LESS='-F -r' 
+0

To rozwiązanie jest już pochowane w komentarzach do odpowiedzi Jefromi'ego (w jakiś sposób). Jednak dobrze jest mieć to w swojej własnej odpowiedzi. –

+3

Nie działa tutaj (xterm na pkt), ponieważ po "less" zakończyło się, nic nie pozostało z mniejszego ekranu, przerysowuje poprzednie monity. Ale działa na określenie "linux" na tty1. – lolesque

+0

Tak, na niektórych systemach/terminalach dane wyjściowe znikają, ponieważ wszystko idzie na "alternatywny ekran" i jest natychmiast przełączane :-(Dodanie '--no-init' może pomóc –