git diff แสดงสีไม่ถูกต้อง


46

ในการรับเอาต์พุตสีจากคำสั่ง git ทั้งหมดฉันได้ตั้งค่าต่อไปนี้:

git config --global color.ui true

แต่นี้ผลิตออกเช่นนี้สำหรับgit diff,git log

ภาพหน้าจอของคอมไพล์ diff

ในขณะที่คำสั่งเช่นgit statusปรับการแสดงผล

ภาพหน้าจอสถานะ git

เหตุใดจึงไม่รู้จักรหัสสีที่ใช้ Escape ในคำสั่งบางคำสั่งเท่านั้นและฉันจะแก้ไขได้อย่างไร

ฉันใช้ iTerm 2 (ประเภทเทอร์มินัลxterm-256color) บน OS X 10.8.2 และ zsh เป็นเชลล์ของฉัน

zsh --version
zsh 5.0.0 (x86_64-apple-darwin12.0.0)

git --version                                                                                                                      
git version 1.7.9.6 (Apple Git-31.1)

คำตอบ:


65

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

คำสั่งเช่นgit diffและgit logท่อส่งออกของพวกเขาเป็นเพจเจอร์ , lessโดยปริยาย Git พยายามบอกlessให้อนุญาตให้ตัวควบคุมมีผลการควบคุม แต่สิ่งนี้ไม่ได้ผลสำหรับคุณ

หากlessเป็นเพจเจอร์ของคุณ แต่คุณได้LESSตั้งค่าตัวแปรสภาพแวดล้อมเป็นค่าที่ไม่มี-rหรือ-Rgit ไม่สามารถบอกlessให้แสดงสีได้ ปกติจะผ่านLESS=-FRSXแต่ไม่LESSได้ตั้งค่าไว้ในสภาพแวดล้อมแล้ว การแก้ไขคือการผ่าน-Rตัวเลือกอย่างชัดเจนเพื่อบอกlessให้แสดงสีเมื่อเรียกใช้โดย git:

git config --global core.pager 'less -R'

หากlessไม่ใช่เพจเจอร์ของคุณให้เปลี่ยนไปใช้lessหรือหาวิธีทำให้เพจเจอร์ของคุณแสดงสี

หากคุณไม่ต้องการที่จะคอมไพล์สีจอแสดงผลเมื่อมีการเรียกใช้เพจเจอร์ชุดcolor.uiไปแทนautotrue


อ่าขอบคุณ ในขณะที่ฉันรู้ว่าlessจำเป็น-Rที่จะแสดงสีผมลืมไปว่าgit logและประปาออกไปgit diff lessขอบคุณ :)

5
ขอขอบคุณ! ฉันไม่ได้สังเกตเห็นว่ามีค่าเริ่มต้น~/.profileใน FreeBSDPAGER=more; export PAGER
Jeffrey Goldberg

ขอบคุณ ฉันLESSตั้งค่าไว้-KเพราะฉันชอบCTRL-Cทุกอย่าง ฉันคิดว่ามันเป็นสิ่งที่ขี้ขลาดกับตัวแปรนั้นและตอนนี้ฉันรู้วิธีแก้ไข
trysis

2

การปรับปรุงคำตอบของ Gilles คุณสามารถใช้$LESSตัวเลือกเดิมของคุณโดยใช้สิ่งนี้ในการตั้งค่า git (ตัวอย่างเช่น~/.gitconfig):

[core]
pager = less -+$LESS -FRX

คำตอบของ quazgar นั้นดี ฉันมีLESS=-iใน bashrc ของฉันดังนั้นฉันจะต้องทำ `[core] เพจเจอร์ = น้อยกว่า $ LESS -FR` ฉันเอา X ออกเพราะด้วย X เนื้อหาเทอร์มินัลที่มีอยู่ของฉันจะถูกลบฉันชอบที่เนื้อหาเทอร์มินัลอยู่
Wayne Walker

1

นอกจากนี้คุณยังจะได้เห็นการแสดงผลนี้ถ้าคุณมีBusybox อัลไพน์ลีนุกซ์เป็นตัวอย่างที่ดีของเครื่องกลั่นที่นิยมใช้กัน ดูhttps://wiki.alpinelinux.org/wiki/Alpine_Linux:FAQ#How_to_enable.2Ffix_colors_for_git.3F

วิธีง่ายๆในการทราบว่าคุณกำลังใช้ Busybox อยู่หรือไม่:

realpath `which less`

หรือถ้าคุณใช้เปลือกปลา

realpath (which less)

ถ้าผลการ/bin/busyboxแล้วคุณสามารถแก้ปัญหาของคุณโดยการติดตั้งGNU น้อย

บนอัลไพน์:

sudo apk --update add less

คำสั่งจะแตกต่างกันไปขึ้นอยู่กับคุณ distro / package manager

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