จะทำให้ git log ไม่แจ้งให้ดำเนินการต่อได้อย่างไร?


93

ฉันมีที่เก็บ git สองสามที่อยู่ด้วยกันและไฟล์ batch / bash แบบง่ายที่จะวนซ้ำ ฉันมักจะวนซ้ำพวกเขาด้วยคำสั่งบันทึกเพื่อดูว่าพวกเขาอยู่ในสถานะใดอย่างรวดเร็วสิ่งนี้ใช้งานได้ดียกเว้นสิ่งหนึ่ง: หากข้อความคอมมิตยาวเกินจำนวนอักขระที่คอนโซลของฉันกว้าง (หรือมีหลายบรรทัด) git แสดงบรรทัดจากนั้นขึ้นบรรทัดใหม่ด้วย (END) และฉันต้องกดqเพื่อดำเนินการต่อ (ฉันเดาว่ามันจะทำให้เอาต์พุตผ่านมากกว่าหรืออะไรทำนองนั้น) ตัวอย่าง:

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

สิ่งนี้ค่อนข้างไม่สะดวกเพราะต้องกดqสองสามครั้งในขณะที่ฉันแค่อยากจะดูรายละเอียดทั้งหมดในครั้งเดียว

ฉันจะปิดใช้งานพฤติกรรมนี้ได้อย่างไร (ควรทำในขณะที่ยังคงรักษารูปแบบบันทึกนี้ไว้)


คำตอบ:


155

Git มีตัวเลือกในการปิดการใช้งานเพจเจอร์:

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

หากเพจเจอร์ของคุณตัดเส้นและคุณต้องการคงพฤติกรรมนั้นไว้ให้ไปที่cut...

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

... หรือตั้งค่าตัวแปรสภาพแวดล้อมGIT_PAGERก่อนการเรียกใช้:

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

มีวิธีทำให้--no-pagerค่าเริ่มต้นหรือทางลัดสำหรับตัวเลือกนี้ดียิ่งขึ้นเมื่อจำเป็นหรือไม่? ฉันคิดว่าgitnpจะใช้นามแฝงgit --no-pagerแต่ฉันคิดว่ามีทางออกที่ดีกว่า
Islam Azab

1
@IslamAzab คุณสามารถนามแฝงgitไป/usr/bin/git --no-pagerซึ่งจะปิดการใช้งานเพจเจอร์สำหรับทุกสายคอมไพล์ของคุณ
mrkmg

1
@WarrenP gitไม่มีเพจเจอร์ในตัว แต่มันเป็นไปตามปรัชญา Unix $PAGERและใช้สิ่งที่คุณมีใน gitเพียงแค่ใช้$PAGERแทนที่จะทำแบบนั้นโดยสุ่มเท่านั้นซึ่งแตกต่างจากเครื่องมือที่เขียนไม่ดีอื่น ๆ ความมหัศจรรย์เพียงgitมีคือว่าถ้า$LESSจะไม่ได้กำหนดไว้ก็จะกำหนดให้เป็นมูลค่า$LESS FRXดูรายละเอียดเพิ่มเติมได้ที่github.com/git/git/blob/master/Documentation/config.txt#L766
Mikko Rantalainen

@WarrenP gitให้การแทนที่ GIT_PAGERที่จะช่วยให้คุณกำหนดค่าที่กำหนดเองที่จะใช้แทนPAGERเมื่อใดก็ตามที่ต้องใช้คอมไพล์เพจ
Mikko Rantalainen

1
กรณีที่ง่ายที่สุดที่แก้ไขพฤติกรรมสำหรับคอมไพล์เท่านั้น: ส่งออก GIT_PAGER = cat
Stragulus

17

อีกวิธีหนึ่งสำหรับปัญหาการปิดใช้เพจเจอร์อย่างถาวรโดยเฉพาะเมื่อใช้คำlogสั่งย่อย:

  • สำหรับ repo ปัจจุบันเท่านั้น:
    git config pager.log false

  • สำหรับการติดตั้งคอมไพล์ของคุณ (เช่น repos ทั้งหมดบนเครื่องของคุณ):
    git config --global pager.log false

อย่างที่คุณเดาได้การทำงานเช่นเดียวกันหากจำเป็นต้องเปิดหรือปิดเพจเจอร์สำหรับคำสั่งย่อยอื่น ๆ เช่น. สำหรับคำสั่งย่อย (ซึ่งพิมพ์สาขา) จะเป็น
branch

git config pager.branch false


วิธีการแก้ปัญหาที่เสนอมีความสง่างามมากกว่า

  • โดยใช้git --no-pagerทุกครั้งที่คุณเรียกใช้คำสั่งบางคำสั่ง
    เพราะเป็นไปได้มากที่คุณไม่ต้องการพิมพ์ในแต่ละครั้ง

  • การระบุgit --no-pagerเป็นนามแฝงสำหรับgit
    Because ค่อนข้างเป็นไปได้คุณต้องการหลีกเลี่ยงการกำหนดค่าส่วนกลางโดยปริยายหรือคุณต้องการให้เปิดใช้เพจเจอร์ในบางกรณี

  • พึ่งพาตัวแปรสภาพแวดล้อมบางอย่างเช่นหรือPAGER ด้วยเหตุนี้คุณจึงต้องตรวจสอบให้แน่ใจว่าได้ตั้งค่าไว้ในเซสชันเทอร์มินัลปัจจุบันของคุณ และถ้าคุณต้องการให้พวกเขาได้รับการตั้งค่าที่กำหนดเองโดยอัตโนมัติทุกครั้งขั้วใหม่ของคุณจะถูกสร้างขึ้นคุณจะต้องเป็นหนึ่งในการเปลี่ยนแปลงของไฟล์ที่เปลือก bootstrapped เหมือนเช่น ไม่ใช่ปัญหาใหญ่อะไร แต่ไฟล์ bootstrapped เหล่านี้มักจะถูกเปลี่ยนแปลงโดยแอปพลิเคชั่นอื่น ๆ เช่นกันและมีสิ่งอื่น ๆ อีกมากมายไม่ใช่แค่ที่ Git ใช้ ดังนั้นในทางทฤษฎีมันจะดีกว่าที่จะระบุการตั้งค่าคอมไพล์ที่เกี่ยวข้องกับการใช้มากกว่าการใส่ไว้ในเช่นGIT_PAGER
    ~/.bashrcgit config~/.bashrc


ทางเลือกอื่นสำหรับการปิดใช้งานpagerสำหรับคำสั่งย่อยทั้งหมดคือการระบุcatตามที่ยูทิลิตี้ git จะใช้สำหรับการเพจ:

  • git config core.pager cat หรือ
  • git config --global core.pager cat

คำตอบของฉันค่อนข้างเปลี่ยนข้อความด้านล่าง:
"ป้องกันไม่ให้คอมไพล์แตกต่างจากการใช้เพจเจอร์?"
https://stackoverflow.com/a/6986231/6103242

มีการอ้างอิงเพื่อชี้ให้เห็นการสนทนาอื่นที่เกี่ยวข้อง



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