คำสั่งสาขา Git ทำงานเหมือน 'น้อย'


415

เมื่อผมใช้คำสั่งไปยังรายการทุกสาขาผมเห็นการส่งออกของgit branchgit branch | less

คำสั่งgit branchควรจะแสดงรายการสาขาเช่นเดียวกับlsสำหรับไฟล์

นี่คือผลลัพธ์ที่ฉันได้รับ:

ป้อนคำอธิบายภาพที่นี่

ฉันจะรับพฤติกรรมเริ่มต้นได้git branchอย่างไร สาเหตุของเพจเอาต์เอาต์คืออะไร

ฉันกำลังใช้ ZSH กับoh_my_zsh(ไม่มีอะไรสำหรับ Git ในนั้น) และฉัน.gitconfigมีลักษณะเช่นนี้:

[user]
  email = myemail@mail.com
  name = Dennis Haegler
[push]
  default = simple
[merge]
   tool = vimdiff
[core]
  editor = nvim
  excludesfile = /Users/dennish/.gitignore_global
[color]
  ui = true
[alias]
  br = branch
  ci = commit -v
  cam = commit -am
  co = checkout
  df = diff
  st = status
  sa = stash
  mt = mergetool
  cp = cherry-pick
  pl = pull --rebase
[difftool "sourcetree"]
  cmd = opendiff \"$LOCAL\" \"$REMOTE\"
[mergetool "sourcetree"]
  cmd = /Applications/SourceTree.app/Contents/Resources/opendiff-w.sh 
  \"$LOCAL\" \"$REMOTE\" -ancestor \"$BASE\" -merge \"$MERGED\"
  trustExitCode = true

คำตอบ:


737

ตามที่ระบุไว้ในการแสดงความคิดเห็นที่จะตอบมาร์ค Adelsberger ของนี้คือการเปลี่ยนแปลงพฤติกรรมเริ่มต้นแนะนำใน Git 2.16

คุณสามารถปิดเอาท์พุทเพจเพื่อgit branchปิดกลับโดยค่าเริ่มต้นด้วยการpager.branchตั้งค่าคอนฟิก :

git config --global pager.branch false

127
นั่นคือการตัดสินใจที่แปลกและแปลกที่จะเริ่มต้น ฉันคาดหวังว่าเครื่องมือ unix-y cli ของฉันจะทำตัวเหมือนโปรแกรมง่าย ๆ แบบโง่ ๆ ที่คุณสามารถโยงได้หากคุณต้องการ แต่ฉันเดาว่าการสนทนานั้นมีไว้สำหรับไซต์อื่น
Stragulus

7
@Stragulus โปรดทราบว่าค่าเริ่มต้นใหม่ไม่ได้หยุดคุณจากการผูกพันgit branchกับสิ่งอื่น โดยใช้การตรวจสอบท่อ , Git ออกจะรายชื่อสาขา stdout ภายในคำสั่งหรือgit branch > branches.txt git branch | wc -l
Rory O'Kane

3
@ RoryO'Kane แต่ด้วยวิทยุติดตามตัวฉันมีชนิดพิเศษESC/qหลังจากgit branchตรวจสอบง่าย
mitnk

23
@mitnk ไม่จำเป็น หากเพจเจอร์ของlessคุณคุณสามารถเพิ่มตัวแปรสภาพแวดล้อม--no-init --quit-if-one-screenของคุณLESSซึ่งจะทำให้lessเพียงแค่เขียนไปยัง stdout หากข้อความสามารถดูได้โดยไม่ต้องเลื่อน ดูman lessรายละเอียดเพิ่มเติมได้ที่
Rory O'Kane

13
หากคุณต้องการที่จะเพิ่มลงในไฟล์ปรับแต่งของคุณด้วยตนเองมัน[pager] branch = false(ในสองบรรทัด)
แซม

56

ดังที่คำตอบอื่น ๆ ชี้ให้เห็น Git จะใช้ค่าเริ่มต้นในการไพพ์เข้าสู่เพจเจอร์ ( lessโดยค่าเริ่มต้น) สำหรับคำสั่งส่วนใหญ่

แม้ว่าจุดสำคัญคือเมื่อตัวแปรสภาพแวดล้อม LESS ไม่ได้ถูกตั้งค่า Git จะตั้งค่าเป็น FRXและผลลัพธ์ก็คือพฤติกรรมที่ผู้ใช้มองเห็นได้จะเหมือนกันกับว่าเพจเจอร์ไม่ได้ถูกใช้เมื่อเอาต์พุตของคำสั่งสั้น (เช่น หากคุณมีสาขาเพียงไม่กี่) ดูผู้ชายน้อยกว่า :

-F หรือ --quit-if-one-screen
ทำให้น้อยกว่าที่จะออกโดยอัตโนมัติหากไฟล์ทั้งหมดสามารถแสดงบนหน้าจอแรก

-R หรือ --RAW-CONTAR-CHARS
[... ] ANSI "สี" ลำดับการหลบหนีจะถูกส่งออกในรูปแบบ "ดิบ"

-X หรือ - no-init
ปิดใช้งานการส่งการเริ่มต้น termcap และสตริง deinitialization ไปยังสถานี บางครั้งสิ่งนี้เป็นที่ต้องการหากสตริง deinitialization ทำสิ่งที่ไม่จำเป็นเช่นการล้างหน้าจอ

หากคุณได้รับพฤติกรรมที่คุณอธิบายคุณมีแนวโน้มที่จะ$LESSตั้งค่าเป็นอย่างอื่นและการยกเลิกการตั้งค่า ( unset LESS) จะเป็นการกำจัดปัญหาในขณะที่ยังคงพฤติกรรม "เพจเจอร์" สำหรับเอาต์พุตระยะยาว หรือคุณสามารถเปิดใช้งานลักษณะการทำงานในขณะที่ยังคง$LESSเป็นเดิมโดยเพิ่มสิ่งนี้ลงใน.gitconfigไฟล์ของคุณ:

[core]
    pager = less -FRX

หากคุณไม่ชอบสิ่งที่เพจเจอร์คุณสามารถปิดการใช้งานได้ทั่วโลกหรือตามคำสั่งต่อไป (ดูคำตอบอื่น ๆ )


40

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

คุณสามารถแทนที่ค่าเริ่มต้นนี้ได้โดยใช้--no-pagerตัวเลือก:

git --no-pager branch

หรือถ้าคุณเปลี่ยนเส้นทางไปยังไฟล์ Git ควรตรวจสอบว่ามันไม่ได้เขียนไปยังเทอร์มินัลดังนั้นจึงไม่ควรใช้เพจเจอร์ (ในทางกลับกันนั่นแสดงให้เห็นกรณีการใช้งานสคริปต์ซึ่งในกรณีนี้คุณควรพิจารณาใช้คำสั่งการวางท่อเช่นgit for-each-refในการตั้งค่าgit branch)


git --no-pager branchโรงงาน แต่ชุดนี้เป็นอย่างไร มีการPAGERตั้งค่าตัวแปรสภาพแวดล้อมlessเท่านั้น นี่ไม่ใช่พฤติกรรมเริ่มต้น วิทยาลัยทั้งหมดของฉันมีผลลัพธ์เป็นรายการที่พิมพ์ออกไปยังเครื่องปลายทาง
DenniJensen

คุณใช้คอมไพล์รุ่นใด และเพื่อนร่วมงานของคุณคนไหนใช้
Lasse V. Karlsen

2.16.0! นี่เป็นคุณสมบัติที่แนะนำให้รู้จักกับคอมไพล์ในรุ่นนี้หรือไม่?
DenniJensen

ใช่มันเป็นค่าเริ่มต้นในขณะนี้ github.com/git/git/blob/master/Documentation/RelNotes/ … วิทยาลัยของฉันถัดจากฉันโดยใช้รุ่นเดียวกันและไม่มีปัญหานี้ :) ขอบคุณ @mark
DenniJensen

1
นี่เป็นคำตอบที่ยอดเยี่ยมที่สุดที่นี่น่าเศร้าที่มันมี upvotes น้อยมากเพราะฉันเลื่อนไปเล็กน้อยเพื่อค้นหางานชิ้นเอกนี้
codepleb

25

พฤติกรรมของ Git นี้ก็น่ารำคาญสำหรับฉันเช่นกัน ฉันได้รับรายการแท็กlessเมื่อต้องการแสดงรายการแท็ก

หนึ่งสามารถควบคุมพฤติกรรมนี้โดยการเปลี่ยนค่าเริ่มต้นGit เพจเจอร์ไปแทนcat lessฉันต้องการเลื่อนใน iTerm มากกว่าในเครื่องมือแก้ไข ฉันชอบที่จะใช้โปรแกรมแก้ไขเมื่อฉันต้องการ

ดังนั้น:

git config --global core.pager cat

1
ใช่นี้ควรจะเป็นคำตอบที่ถูกต้องสำหรับฉัน
ตูรา

2
ขอบคุณสำหรับหัวขึ้น. ฉันยอมรับหลังจากใช้งานไปสองสามเดือนฉันยังคงใช้แมวอยู่ แต่ตัวอย่างเช่นเมื่อทำgit logแล้วมันน่ารำคาญ ฉันเพิ่งพลาดพฤติกรรมดั้งเดิม แต่ไม่มีเวลาที่จะปรับปรุงขั้นตอนการทำงานประจำวันของฉันในแง่มุมนี้
ionescu77

คุณชนะ! ... สมบูรณ์แบบ!
sdlins

2
โปรดทราบว่าสิ่งนี้จะใช้กับgit log...
bagerard

10

สำหรับผู้ที่ต้องการอัปเดต~/.gitconfigเพื่อแก้ไขปัญหานี้จะมีลักษณะดังนี้:

[pager]
   branch = false

สิ่งแปลก ๆ ที่นี่: การตั้งค่านี้ใช้งานได้และเนื่องจากบางวันมันไม่ได้อีกต่อไปมีอะไรเปลี่ยนแปลงหรือการกำหนดค่าของฉันไม่ได้ถูกนำไปใช้หรือ
ConquerorsHaki

7

คำสั่งสาขา Git ทำงานเหมือน 'น้อย'

เนื่องจาก Git โดยค่าเริ่มต้นจะเปิดเอาต์พุตเป็นเพจเจอร์ (อย่างน้อยใน Ubuntu) คำตอบที่ได้รับการยอมรับอย่างสมบูรณ์จะแทนที่เพจเจอร์ซึ่งคุณอาจไม่เช่นถ้าส่งออกของคุณมีความยาวมาก

ฉันขอแนะนำให้แทนที่เพจเจอร์ด้วยlessดังนั้นมันจะไม่ "เลื่อน" เอาต์พุตน้อยกว่าความสูงของเทอร์มินัล

git config --global --replace-all core.pager "less -F -X"


2

คำตอบที่ยอมรับดูเหมือนผิด มีสองปัญหาคือ

  1. พฤติกรรมนี้แตกต่างกันระหว่าง bash และ zsh 'ปัญหา' แสดงขึ้นภายใต้ zsh เท่านั้น
  2. โซลูชันที่แนะนำจะgit branchไม่ใช้เพจเจอร์เสมอซึ่งจะไม่ต้องการเมื่อมีเอาต์พุตจำนวนมาก

เหตุผลที่แท้จริงคือทุบตีที่และ zsh มีความหมายที่แตกต่างกันเกี่ยวกับการเริ่มต้นหักทุบตีกำหนดอะไรในขณะที่กำหนด zsh -Rมัน เมื่อฉันทำunset LESS zsh ทุกอย่างกลับไปเป็นปกติ ....

-Rพฤติกรรมอาจจะยังคงเป็นที่ต้องการ ในกรณีนั้นคุณสามารถเพิ่มคำสั่งต่อไปนี้ใน. zshrc ของคุณเพื่อให้ทุกอย่างทำงานได้:

export LESS=-FRX

-F'ทำให้น้อยลงเพื่อออกโดยอัตโนมัติหากไฟล์ทั้งหมดสามารถแสดงบนหน้าจอแรก' อย่างไรก็ตาม-Xจำเป็นต้องระบุพร้อมกันมิฉะนั้นจะไม่มีการแสดงผลออกมาเมื่อมีจำนวนหน้าจอน้อยกว่าเอาต์พุต


0

https://git-scm.com/book/en/v2/Git-Internals-Environment-Variables

GIT_PAGER ควบคุมโปรแกรมที่ใช้แสดงผลลัพธ์แบบหลายหน้าในบรรทัดคำสั่ง หากไม่ได้ตั้งค่าไว้ PAGER จะถูกใช้เป็นทางเลือก

เพื่อแก้ปัญหาของคุณคุณสามารถยกเลิกการตั้งค่า PAGER และ GIT_PAGER ในเปลือกของคุณ


1
ปัญหา Unset PAGER( GIT_PAGERถูก unset) ยังคงมีอยู่ มีสถานที่ใดที่ฉันต้องตรวจสอบ env vars นี้หรือไม่?
DenniJensen

@DenniJensen คุณสามารถตั้งค่าวิทยุติดตามตัวในคำสั่งเช่นPAGER= git branch(มีหนึ่งช่องว่างหลังจากและไม่มีใครก่อนที่เครื่องหมายเท่ากับเท่ากับเขียน) git branch | catไม่มีความคิดไม่ว่าจะเป็นที่ดีกว่าเช่น
maaartinus

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