Bagaimana cara membuat git diff menulis ke stdout?


93

Secara default git diffmencetak semua +-baris ke stdout namun saya memiliki mesin (devian) (yang saya hubungkan melalui ssh) di mana git diffmembawa saya ke editor (yang saya tidak tahu yang mana) dan saya perlu menekan quntuk melanjutkan.

Saya sudah checker git config dan sepertinya:

$ git config --list
user.name=XXX
user.email=XXX@XXX
color.ui=false
difftool.prompt=false
mergetool.prompt=false
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
remote.origin.url=XXX
branch.master.remote=origin
branch.master.merge=refs/heads/master
$ git config --global --list
user.name=XXX
user.email=XXX@XXX
color.ui=false
difftool.prompt=false
mergetool.prompt=false
$ git config --system --list
'/etc/gitconfig': No such file or directory

Apakah ada tempat yang saya lewatkan? Mungkin alat yang tidak dikenal adalah fallback atau sesuatu karena saya mesin saya kehilangan sesuatu? Setiap bantuan dihargai. Terima kasih.


Jawaban:


167

Secara default, Git mengirim output diff-nya (dan umumnya setiap output yang mungkin lebih dari screenful) untuk sistem pager , yang merupakan utilitas yang mencetak hanya satu screenful output pada suatu waktu. Jika Anda ingin menonaktifkan pager saat Anda menjalankan perintah, teruskan --no-pagerke Git:

$ git --no-pager <subcommand> <options>

Ini dapat dijalankan untuk perintah Git apa pun.

Jika Anda ingin menonaktifkannya secara default hanya untuk diff , Anda dapat mengatur halaman diff ke catdengan menjalankan:

$ git config pager.diff false

Jika Anda ingin menonaktifkannya secara default untuk semua perintah , Anda dapat menyetel halaman Git ke catdengan menjalankan:

$ git config --global core.pager cat

Tidak tahu tentang pager. git config --global core.pager catmelakukannya!. Terima kasih :)
nacho4d

4
@aaronbauman: Apakah Anda meneruskannya ke git( bukan subperintah)?
mipadi

Begitu, "git --no-pager diff" berbeda dengan "git diff --no-pager". Terima kasih atas klarifikasi
aaronbauman

1
Hal yang sama berlaku untuk git branch, misalnyagit config pager.branch false
dinjas

30

Nilai berikut core.pagermenggunakan less, yang mencetak ke stdout, dan juga memiliki fungsionalitas halaman (jika diperlukan), memungkinkan pengguliran ke atas dan ke bawah (tidak seperti cat):

$ git config --global core.pager "less -FRSX"

Ini segera berhenti jika diff cocok dengan layar pertama ( -F), mengeluarkan karakter kontrol mentah ( -R), memotong garis panjang daripada membungkus ( -S), dan tidak menggunakan termcap init / deinit strings ( -X).


1
Terima kasih .. Saya mencari opsi ini di seluruh internet :)
obai

Ini yang saya inginkan
pengguna3595632

20

Anda juga dapat menggunakan perintah catapa pun gitjika Anda tidak peduli dengan warnanya.

Jadi git diff | catuntuk kasusmu.

Edit: seperti yang ditunjukkan di komentar jika Anda benar-benar peduli dengan warna, gunakan:

git diff --color | cat


9
Dan jika Anda benar-benar peduli dengan warnanya, lakukan git diff --color | cat(:
xjcl
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.