git diff hiển thị màu sắc không chính xác


46

Để có được đầu ra màu từ tất cả các lệnh git, tôi đặt như sau:

git config --global color.ui true

Tuy nhiên, điều này tạo ra một đầu ra như thế này cho git diff,git log

ảnh chụp màn hình git diff

trong khi các lệnh như git statushiển thị tốt

ảnh chụp màn hình trạng thái git

Tại sao nó không nhận ra mã màu đã thoát trong một số lệnh và làm cách nào để sửa nó?

Tôi đang sử dụng iTerm 2 (loại thiết bị đầu cuối xterm-256color) trên OS X 10.8.2 và zsh làm vỏ của tôi

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

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

Câu trả lời:


65

Bạn đang nhìn thấy các chuỗi thoát cho thiết bị đầu cuối thay đổi màu sắc được hiển thị với ký tự thoát được hiển thị ESC, trong khi hành vi mong muốn là các chuỗi thoát có tác dụng dự định của chúng.

Các lệnh như git diffgit logdẫn đầu ra của chúng thành một máy nhắn tin , lesstheo mặc định. Git cố gắng nói lessđể cho phép các nhân vật điều khiển có tác dụng điều khiển, nhưng điều này không hiệu quả với bạn.

Nếu lesslà máy nhắn tin của bạn nhưng bạn có biến môi trường LESSđược đặt thành giá trị không bao gồm -rhoặc -R, git không thể nói lessđể hiển thị màu. Nó thường vượt qua LESS=-FRSX, nhưng không phải nếu LESSđã được thiết lập trong môi trường. Một sửa chữa là để vượt qua -Rtùy chọn lessđể hiển thị màu sắc khi được gọi bởi git:

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

Nếu lesskhông phải là máy nhắn tin của bạn, hãy chuyển sang lesshoặc tìm ra cách làm cho màu máy nhắn tin của bạn hiển thị màu.

Nếu bạn không muốn git hiển thị màu khi nó gọi máy nhắn tin, hãy đặt color.uithành autothay vì true.


À, cảm ơn. Trong khi tôi biết rằng lesscần -Rphải hiển thị màu sắc, tôi đã quên điều đó git loggit diffđầu ra theo đường ống less. Cảm ơn :)

5
Cảm ơn bạn! Tôi đã không nhận thấy rằng mặc định ~/.profiletrong FreeBSD cóPAGER=more; export PAGER
Jeffrey Goldberg

Cảm ơn. Tôi đã LESSđặt ra -Kbởi vì tôi thích có thể CTRL-Cmọi thứ. Tôi nghĩ rằng đó là một cái gì đó thú vị với biến đó, và bây giờ tôi biết cách khắc phục nó.
chiến thắng

2

Cải thiện câu trả lời của Gilles , bạn có thể giữ các $LESStùy chọn cũ của mình bằng cách sử dụng tùy chọn này trong cấu hình git của bạn (ví dụ: trong ~/.gitconfig):

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

câu trả lời của quazgar là tốt. Tôi có LESS=-itrong bashrc của mình, vì vậy tôi sẽ phải thực hiện `[core] pager = less $ LESS -FR` Tôi đã lấy X ra, vì với X, nội dung thiết bị đầu cuối hiện tại của tôi bị xóa, tôi thích nội dung của thiết bị đầu cuối hơn.
Wayne Walker

1

Bạn cũng có thể thấy đầu ra này nếu bạn có Busybox . Alpine Linux là một ví dụ điển hình về một bản phân phối phổ biến sử dụng nó. Xem https://wiki.alpinelinux.org/wiki/Alpine_Linux:FAQ#How_to_enable.2Ffix_colors_for_git.3F

Một cách đơn giản để biết nếu bạn hiện đang sử dụng Busybox là chạy:

realpath `which less`

Hoặc nếu bạn sử dụng vỏ cá

realpath (which less)

Nếu đầu ra là /bin/busybox, thì bạn có thể giải quyết vấn đề của mình bằng cách cài đặt gnu ít hơn .

Trên núi cao:

sudo apk --update add less

Lệnh sẽ khác nhau tùy thuộc vào bạn distro / trình quản lý gói.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.