จะทำให้ colorize output ของ git เป็นอย่างไร?


255

มีวิธีการออกสีสำหรับ git (หรือคำสั่งใด ๆ )?

พิจารณา:

baller@Laptop:~/rails/spunky-monkey$ git status
# On branch new-message-types
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   app/models/message_type.rb
#
no changes added to commit (use "git add" and/or "git commit -a")
baller@Laptop:~/rails/spunky-monkey$ git add app/models

และ

baller@Laptop:~/rails/spunky-monkey$ git status
# On branch new-message-types
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       modified:   app/models/message_type.rb
#

เอาต์พุตดูเหมือนกัน แต่ข้อมูลแตกต่างกันโดยสิ้นเชิง: ไฟล์ได้หายไปจากสถานะที่ไม่มีการจัดฉากสำหรับการคอมมิท

มีวิธีการ colorize ผลลัพธ์หรือไม่ ตัวอย่างเช่นไฟล์ที่ไม่มีสถานะเป็นสีแดงมีสถานะเป็นสีเขียว

หรือแม้กระทั่งChanges not staged for commit:สีแดงและ# Changes to be committed:เขียว

ทำงานกับ Ubuntu

แก้ไข: Googling git config --global --add color.ui trueพบคำตอบนี้ซึ่งใช้งานได้ดี:

อย่างไรก็ตามมีวิธีแก้ปัญหาทั่วไปเพิ่มเติมสำหรับการเพิ่มสีให้กับเอาต์พุตคำสั่งหรือไม่?


1
คุณต้องการบางสิ่งที่ทำให้ผลลัพธ์คำสั่งทั้งหมดเป็นสี? มันจะรู้ได้อย่างไรว่าชิ้นส่วนสีใด
Michael Mrozek

ฉันเดาว่ามีวิธีกำหนดค่าโดยใช้ regex หรือไม่แต่ละสีอาจมี regex เริ่มต้น และอาจมี regex สีเริ่มต้นเพื่อปิดสีทั้งหมด และถ้าข้อความ "foo" ปรากฏขึ้นแสดงในสีบาง ...
B เจ็ด

คำตอบ:


268

คุณสามารถสร้างส่วน[color]ในของคุณ~/.gitconfigด้วยเช่นเนื้อหาต่อไปนี้

[color]
  diff = auto
  status = auto
  branch = auto
  interactive = auto
  ui = true
  pager = true

คุณยังสามารถควบคุมสิ่งที่คุณต้องการให้มีสีในแบบที่ดีเช่น

[color "status"]
  added = green
  changed = red bold
  untracked = magenta bold

[color "branch"]
  remote = yellow

ฉันหวังว่านี่จะช่วยให้คุณเริ่มต้นได้ และแน่นอนคุณต้องมีเทอร์มินัลที่รองรับสี


14
ฉันคิดว่ามันอาจจะคุ้มค่าที่จะวาง git config - global color.ui auto (คำตอบของ @Evgeny) ที่ด้านบนของคุณ ... ฉันคิดว่าน่าจะเป็นสิ่งที่คนส่วนใหญ่มองหา ฉัน upvoting ทั้งสอง ... ฉันแค่พูดเพื่อประโยชน์ของอินเทอร์เน็ตที่มาที่นี่ฉันคิดว่าผู้คนจำนวนมากต้องการเพียงหนึ่งซับที่เรียบง่าย ทุกอย่างดีขึ้นหากพวกเขาได้รับมันรวมถึงความดีของคุณ
msouth

นี้ทำงานได้อย่างสมบูรณ์แบบสำหรับฉัน - ในส่วนของผมเพิ่ม[color "status"] branch = yellow
Wayne Werner

3
คุณสามารถเพิ่มส่วน [color] ในไฟล์. git / config ของโครงการได้เช่นกัน
andrej

และคุณสามารถตั้งค่าตัวแปรการตั้งค่าสำหรับการเรียกใช้คำสั่ง git เพียงครั้งเดียว: stackoverflow.com/a/18304605/134044
NeilG

220

คุณอาจต้องการใช้

git config --global color.ui auto

autoส่วนหนึ่งบอกว่าคอมไพล์จะลองและใช้สีบนขั้วที่สนับสนุนมันและคุณจะไม่ได้รับลำดับ ANSI ถ้าคุณเปลี่ยนเส้นทางออกคำสั่งคอมไพล์ไปยังแฟ้มตัวอย่างเช่น ตั้งtrueเป็นเหมือนกันautoและนี่ก็เป็นค่าเริ่มต้นตั้งแต่ Git 1.8.4

นี่color.uiคือการกำหนดค่าเมตาที่มีการcolor.*กำหนดค่าต่างๆที่มีอยู่ในคำสั่ง git

git help configนี่คือคำอธิบายในเชิงลึกใน


คุณสามารถอธิบายความแตกต่างระหว่าง color.ui true(ซึ่งautoชี้ไปที่) กับalwaysอะไร ฉันอ่านเอกสารแต่ฉันก็ยังไม่พบความแตกต่าง
chharvey

19
git config --global color.ui auto
git config --global color.branch auto
git config --global color.status auto

ปีงบประมาณสิ่งนี้ใช้ได้กับ git เวอร์ชั่น 1.5.2.1 เท่านั้นคำตอบอื่น ๆ ไม่ได้
AbhiNickz

14

คำตอบที่ได้รับการยอมรับให้ทางออกที่พบบ่อยที่สุด หากด้วยเหตุผลใดก็ตามที่คุณไม่จำเป็นต้องเปลี่ยนการกำหนดค่าอย่างถาวรซึ่งโซลูชันนั้นทำคุณอาจแทนที่การกำหนดค่าสำหรับคำสั่ง git เดียว:

git -c color.ui=always <usual git command and options>

ตัวอย่างเช่น:

git -c color.ui=always status
git -c color.ui=always diff

ทดสอบแล้ว: รองรับ git 2.4.6, ไม่รองรับ git 1.7.1


2
สำหรับคนอื่นที่พยายามให้ได้สีเมื่อมีการวางท่อlessเหมือนอย่างที่คุณเคยเป็นคุณสามารถสร้างlessตัวละครผ่านการหลบหนีสีผ่านไปยังเทอร์มินัลless -Rได้
xdhmoore

เพิ่มฟีเจอร์นี้เมื่อใด?
Ondra Žižka

11
git config --global color.ui always
git config --global color.branch always
git config --global color.diff always
git config --global color.interactive always
git config --global color.status always
git config --global color.grep always
git config --global color.pager true
git config --global color.decorate always
git config --global color.showbranch always

1

คุณสามารถทำเช่นนี้กับพลคำสั่งเอาท์พุท Colourer ส่วนใหญ่ใช้งานได้ แต่ฉันไม่ได้คิดวิธีการแก้ไขข้อผิดพลาดที่แจ้งให้คาดหวังว่าการป้อนข้อมูลจะไม่ปรากฏขึ้นและคุณไม่สามารถพิมพ์อินพุตที่ต้องการที่รู้จักและกด Enter เพื่อดำเนินการต่อในทุกกรณี

ตัวอย่างของ~/.acoc.confสำหรับgit:

# git
[git/ae]
/.*(error:.*)/                                    red+bold
/.*(warning:.*)/                                  yellow
/.*(hint:.*)/                                     magenta
/.*(up-to-date).*/                                green+bold
/.*(nothing to commit).*/                         green
/^(\+.*)/                                         green
/^(-.*)/                                          red

..which ทำงานอย่างพร้อมกับในalias git="acoc git".bash_profile


คุณสามารถแชร์การกำหนดค่าของคุณได้acocหรือไม่
เกร็ก Dubicki

เป็นเรื่องง่ายที่จะเขียน :) เพิ่มเข้าไปในคำตอบ
เกร็ก Dubicki

1

สำหรับสีที่ถูกgit diffสอดเข้ามาlessสิ่งนี้ได้ผล:

git -c color.diff=always diff [...] | less -R

0

ฉันรู้ว่าโพสต์นั้นอายุสี่ขวบ แต่ไม่มีใครตอบกลับจากค่ายของฉันคนตาบอดสี หากคุณสามารถแยกแยะสีต่าง ๆ ละเว้นโพสต์ของฉัน

ตัวอย่างเช่น "สถานะ git" จะแสดงข้อความที่เป็นสีขาวบนพื้นหลัง / สีดำบนพื้นหลังสีขาว (อ่านง่าย), สีเทาเข้มสำหรับลบ (อ่านไม่ออกกับพื้นหลังสีดำ แต่อ่านได้ชัดเจนกับพื้นหลังสีขาว) และสีเทาขนาดกลาง พื้นหลังอ่านไม่ออกบนพื้นหลังสีขาว) ฉันเคยสลับพื้นหลังของหน้าต่างเทอร์มินัลของฉันเป็น / จากสีขาว / ดำดังนั้นฉันจึงสามารถอ่านข้อความที่อ่านไม่ออก ทางออกที่ง่ายคือ:

 git status | more

สิ่งนี้ทำให้ข้อความทั้งหมดอ่านง่ายบนหน้าต่างเทอร์มินัลพื้นหลังสีขาวหรือสีดำมาตรฐาน


1
นอกจากนี้คุณยังสามารถเปลี่ยนการตั้งค่าเพื่อตั้งทุกอย่างให้เป็นสีโดยปริยาย ( color.ui = never)
ผู้ชายกับหมวก

0

หรือปิด colorization ทั้งหมด / เกือบทั้งหมดผ่าน:

git config --global color.ui false
git config --global color.branch false
git config --global color.diff false
git config --global color.interactive false
git config --global color.status false
git config --global color.grep false
git config --global color.pager false
git config --global color.decorate false
git config --global color.showbranch false

OP ไม่ได้มองที่จะเปิดปิดสีค่อนข้างที่จะเปิดในสี ใน OP เขากล่าวถึงวิธีการทำgitและต้องการทำบางอย่างในระดับโลก หากคุณรู้วิธีดังกล่าวโปรดแก้ไขคำตอบของคุณเพื่ออธิบาย
Spellweaver Gypsy

บางครั้งผู้คนกำลังมองหาบางสิ่งที่เกี่ยวข้องอย่างใกล้ชิด แต่แตกต่างกันเล็กน้อย - แต่ต้องขอบคุณ downvote
theRiley

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