Bagaimana cara membuat git log not prompt untuk melanjutkan?

93

Saya memiliki beberapa repositori git yang dimiliki bersama, dan file batch / bash sederhana untuk mengulanginya. Saya sering mengulanginya dengan perintah log untuk segera melihat status mereka. Ini berfungsi dengan baik, kecuali untuk satu hal: jika pesan komit lebih panjang dari jumlah karakter konsol saya lebar (atau memiliki banyak baris), git menunjukkan garis, lalu baris baru dengan (AKHIR) dan saya harus menekan q untuk melanjutkan (saya kira itu menyalurkan output melalui lebih banyak atau sesuatu seperti itu). Contoh:

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

Ini agak merepotkan karena saya harus menekan q beberapa kali, sedangkan saya hanya ingin melihat semua oneliners itu sekaligus.

Bagaimana cara menonaktifkan perilaku ini (sebaiknya dengan tetap mempertahankan format log ini)?

stijn
sumber
2
kemungkinan duplikat mengapa saya harus menekan q di akhir git log
Sgoettschkes

Jawaban:

155

Git memiliki opsi untuk menonaktifkan pager:

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

Jika pager Anda memotong garis dan Anda ingin mempertahankan perilaku itu, salah satu pipa ke cut...

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

... atau setel variabel lingkungan GIT_PAGERsebelum pemanggilan:

GIT_PAGER="cut -c 1-${COLUMNS-80}" git --no-pager log --decorate=short --pretty=oneline -n1
toabi
sumber
Apakah ada cara untuk membuat --no-pagerdefault atau bahkan lebih baik dengan cara pintas untuk opsi ini bila diperlukan? Saya pikir dari aliasing gitnpuntuk git --no-pager, tapi saya pikir ada solusi yang lebih baik.
Islam Azab
1
@IslamAzab, Anda bisa alias gituntuk /usr/bin/git --no-pageryang akan menonaktifkan pager untuk semua panggilan git Anda.
mrkmg
1
@WarrenP gittidak memiliki pager bawaan . Sebaliknya, ia mengikuti filosofi Unix dan menggunakan apa pun yang Anda miliki $PAGER. githanya selalu menggunakan $PAGERalih-alih melakukannya hanya secara acak tidak seperti banyak alat yang ditulis dengan buruk lainnya. Satu-satunya sihir gitmemiliki adalah bahwa jika $LESSini tidak didefinisikan , akan menentukan $LESSnilai FRX. Lihat sekitar github.com/git/git/blob/master/Documentation/config.txt#L766 untuk detail selengkapnya.
Mikko Rantalainen
@WarrenP githanya memberikan sebuah override GIT_PAGER yang akan memungkinkan Anda untuk menentukan nilai kustom yang akan digunakan sebagai ganti PAGERsetiap kali git membutuhkan paging.
Mikko Rantalainen
1
Kasus paling sederhana yang memperbaiki perilaku hanya untuk git: export GIT_PAGER = cat
Stragulus
17

Solusi lain untuk masalah menonaktifkan pager secara permanen khususnya saat menggunakan logsubperintah:

  • hanya untuk repo saat ini:
    git config pager.log false

  • untuk instalasi git Anda (yaitu semua repositori di mesin Anda):
    git config --global pager.log false

Seperti yang Anda bisa menebak, karya-karya yang sama jika pager yang dibutuhkan untuk menjadi pada atau off untuk beberapa subcommands lainnya selektif.
E. g. untuk branch(yang mencetak cabang) subperintah itu akan

git config pager.branch false


Solusi yang diusulkan bisa dibilang lebih elegan dibandingkan

  • menggunakan git --no-pagersetiap kali Anda menjalankan perintah tertentu.
    Karena, sangat mungkin, Anda tidak ingin mengetiknya setiap kali.

  • menentukan git --no-pagersebagai alias untuk git
    Karena, sangat mungkin, Anda ingin menghindari konfigurasi global implisit ATAU Anda ingin pager diaktifkan dalam beberapa kasus.

  • bergantung pada beberapa variabel lingkungan seperti PAGERatau GIT_PAGER.
    Karena untuk melakukan itu, Anda perlu memastikannya diatur dalam sesi terminal Anda saat ini. Dan, jika Anda ingin mereka disetel ke beberapa nilai kustom secara otomatis setiap kali terminal baru Anda dibuat, Anda perlu mengubah salah satu file shell-bootstrap seperti misalnya ~/.bashrc. Itu bukan masalah besar. Tetapi file-file yang di-bootstrap ini sering diubah oleh aplikasi lain juga dan berisi banyak hal lain, tidak hanya yang digunakan oleh Git. Jadi, secara teori, lebih baik menetapkan pengaturan terkait git menggunakan git configdaripada memasukkannya ke misalnya ~/.bashrc.


Solusi alternatif untuk menonaktifkan pageruntuk semua subcommands adalah untuk menentukan catsebagai git utilitas akan digunakan untuk paging:

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

Jawaban saya agak mengulang yang di bawah ini:
"mencegah git diff menggunakan pager?"
https://stackoverflow.com/a/6986231/6103242

Ini dirujuk untuk menunjukkan diskusi lain yang relevan.

vladZamskoi
sumber
3

Nonaktifkan pager untuk semua perintah:

git config --global core.pager '' 
marchozaur.dll
sumber
2

Anda menyalurkannya ke less -F jika --no-pager tidak berfungsi untuk Anda.

git log --decorate --oneline -5 | less -F
Nick Constantine
sumber