วิธีทำให้ git diff เขียนถึง stdout?


93

ตามค่าเริ่มต้นจะgit diffพิมพ์ทุก+-บรรทัดไปยัง stdout อย่างไรก็ตามฉันมีเครื่อง (devian) (ซึ่งฉันเชื่อมต่อผ่าน ssh) ซึ่งgit diffจะนำฉันไปสู่ตัวแก้ไข (ซึ่งฉันไม่รู้ว่าคืออะไร) และฉันต้องกดqเพื่อดำเนินการต่อ

ฉันตรวจสอบการกำหนดค่าคอมไพล์แล้วและดูเหมือนว่า:

$ 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

มีสถานที่ที่ฉันหายไปหรือไม่? บางทีเครื่องมือที่ไม่รู้จักอาจเป็นทางเลือกอื่นหรือเป็นเพราะเครื่องของฉันหายไป? ขอความช่วยเหลือใด ๆ ขอบคุณ.


คำตอบ:


167

ตามค่าเริ่มต้น Git จะส่งเอาต์พุตที่แตกต่างกัน (และโดยทั่วไปแล้วเอาต์พุตใด ๆ ที่อาจเป็นมากกว่าหน้าจอ) ไปยังเพจเจอร์ของระบบซึ่งเป็นยูทิลิตี้ที่พิมพ์ผลลัพธ์เพียงหนึ่งหน้าจอในแต่ละครั้ง หากคุณต้องการปิดการใช้งานเพจเจอร์เมื่อคุณเรียกใช้คำสั่งให้ส่ง--no-pagerไปที่ Git:

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

สิ่งนี้สามารถเรียกใช้สำหรับคำสั่ง Git ใดก็ได้

หากคุณต้องการปิดใช้งานโดยค่าเริ่มต้นสำหรับ diff เท่านั้นคุณสามารถตั้งค่า diff pager ให้ได้catโดยการเรียกใช้:

$ git config pager.diff false

หากคุณต้องการปิดการใช้งานโดยค่าเริ่มต้นสำหรับคำสั่งทั้งหมดคุณสามารถตั้งค่าเพจเจอร์ Git ให้catโดยเรียกใช้:

$ git config --global core.pager cat

ไม่ทราบเกี่ยวกับเพจเจอร์. git config --global core.pager catทำได้!. ขอบคุณ :)
nacho4d

4
@aaronbauman: คุณส่งไปยังgit( ไม่ใช่คำสั่งย่อย) หรือไม่?
mipadi

ฉันเห็นว่า "git --no-pager diff" แตกต่างจาก "git diff --no-pager" ขอบคุณสำหรับคำชี้แจง
aaronbauman

1
สิ่งเดียวกันก็ใช้ได้git branchเช่นgit config pager.branch false
dinjas

30

core.pagerค่าต่อไปนี้ใช้lessซึ่งพิมพ์ไปยัง stdout และยังมีฟังก์ชันการทำงานของเพจเจอร์ (หากจำเป็น) ทำให้สามารถเลื่อนขึ้นและลงได้ (ไม่เหมือนcat):

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

มันจะหยุดทำงานทันทีหากความแตกต่างพอดีกับหน้าจอแรก ( -F), แสดงอักขระควบคุมแบบดิบ ( -R), ตัดบรรทัดยาวแทนการตัด ( -S), และไม่ใช้ termcap init / deinit strings ( -X)


1
ขอบคุณ .. ฉันกำลังมองหาตัวเลือกนี้ทางอินเทอร์เน็ต :)
obai

อันนี้คือสิ่งที่ฉันต้องการ
user3595632

21

คุณยังสามารถใช้catสำหรับgitคำสั่งใดก็ได้หากคุณไม่สนใจเรื่องสี

ดังนั้นgit diff | catสำหรับกรณีของคุณ

แก้ไข: ตามที่ระบุไว้ในความคิดเห็นหากคุณสนใจเกี่ยวกับสีให้ใช้:

git diff --color | cat


9
และถ้าคุณสนใจเรื่องสีให้ทำgit diff --color | cat(:
xjcl
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.