Jak sprawić, by dziennik git nie monitował o kontynuację?


93

Mam kilka repozytoriów git, które należą do siebie, i prosty plik wsadowy / bash do zapętlenia nad nimi. Często zapętlam je za pomocą polecenia dziennika, aby szybko zobaczyć, w jakim są stanie. Działa to ładnie, z wyjątkiem jednej rzeczy: jeśli komunikat o zmianach jest dłuższy niż liczba znaków, moja konsola jest szeroka (lub ma wiele linii), git pokazuje linię, a następnie znak nowej linii z (END) i muszę nacisnąć q, aby kontynuować (myślę, że przepuszcza wyjście przez więcej lub coś w tym rodzaju). Przykład:

> 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)

Jest to raczej niewygodne, ponieważ muszę kilka razy nacisnąć q , podczas gdy chciałbym zobaczyć wszystkie te onelinery za jednym zamachem.

Jak mogę wyłączyć to zachowanie (najlepiej zachowując ten format dziennika)?


Odpowiedzi:


155

Git ma opcję wyłączenia pagera:

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

Jeśli twój pager tnie linie i chcesz zachować to zachowanie, użyj potoku do cut...

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

... lub ustaw zmienną środowiskową GIT_PAGERprzed wywołaniem:

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

Czy istnieje sposób, aby w razie --no-pagerpotrzeby ustawić domyślny lub nawet lepszy skrót dla tej opcji? Myślałem o aliasingu gitnpdo git --no-pager, ale myślę, że jest lepsze rozwiązanie.
Islam Azab

1
@IslamAzab, można alias gitdo /usr/bin/git --no-pagerktórego będzie wyłączyć pager dla wszystkich git połączeń.
mrkmg

1
@WarrenP gitnie ma wbudowanego pagera. Zamiast tego, jest zgodny z filozofią Uniksa i używa wszystkiego, co masz $PAGER. gitpo prostu zawsze używa $PAGERzamiast robić to tylko przypadkowo, w przeciwieństwie do wielu innych źle napisanych narzędzi. Jedyną magią gitjest to, że jeśli nie$LESS zostanie zdefiniowane , zdefiniuje $LESSwartość FRX. Więcej informacji można znaleźć pod adresem github.com/git/git/blob/master/Documentation/config.txt#L766 .
Mikko Rantalainen

@WarrenP gitpo prostu zapewnia nadpisanie GIT_PAGER , które pozwoli ci zdefiniować niestandardową wartość, która będzie używana zamiast PAGERzawsze, gdy git wymaga stronicowania.
Mikko Rantalainen

1
Najprostszy przypadek, który naprawia zachowanie tylko dla git: export GIT_PAGER = cat
Stragulus

17

Inne rozwiązanie problemu trwałego wyłączania pagera, szczególnie podczas korzystania z logpodkomendy:

  • tylko dla aktualnego repozytorium:
    git config pager.log false

  • dla twojej instalacji git (czyli wszystkich repozytoriów na twoim komputerze):
    git config --global pager.log false

Jak można się domyślić, to samo działa, jeśli pager ma być włączony lub wyłączony selektywnie dla niektórych innych podkomend.
E. g. for branch(która wyświetla gałęzie) będzie to komenda

git config pager.branch false


Proponowane rozwiązanie jest prawdopodobnie bardziej eleganckie w porównaniu do

  • za git --no-pagerkażdym razem, gdy uruchamiasz określone polecenie.
    Ponieważ, całkiem możliwe, nie chcesz tego wpisywać za każdym razem.

  • określanie git --no-pagerjako alias dla git
    Ponieważ, całkiem możliwe, chcesz uniknąć niejawnej konfiguracji globalnej LUB chcesz, aby w niektórych przypadkach pager był włączony.

  • polegać na niektórych zmiennych środowiskowych, takich jak PAGERlub GIT_PAGER.
    Aby to zrobić, musisz upewnić się, że są one ustawione w bieżącej sesji terminala. A jeśli chcesz, aby były one automatycznie ustawiane na jakąś niestandardową wartość za każdym razem, gdy tworzony jest nowy terminal, musisz zmienić jeden z plików ładowanych z powłoki, takich jak np ~/.bashrc. To nie jest duży problem. Ale te pliki bootstrap są często zmieniane przez inne aplikacje i zawierają wiele innych rzeczy, nie tylko tych używanych przez Git. Więc teoretycznie lepiej jest określić ustawienia związane z gitem za pomocą git config, niż umieszczać je np ~/.bashrc.


Alternatywne rozwiązanie dla wyłączenie pagerdla wszystkich podpoleceń jest określenie catjak git narzędzie wykorzysta stronicowania:

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

Moją odpowiedzią jest nieco przeformułowanie poniższego:
"zapobiec używaniu pagera przez git diff?"
https://stackoverflow.com/a/6986231/6103242

Przywołuje się w celu wskazania innej istotnej dyskusji.



2

Przekierowujesz go do less -F, na wypadek gdyby opcja --no-pager nie zadziałała.

git log --decorate --oneline -5 | less -F
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.