2011-12-13 32 views
51

Gần đây, tôi chuyển sang SLES 11. Tôi đã tìm thấy sự cố với lệnh git. Tất cả các màu ANSI không thể được trả lại. Thay vào đó, nó cho thấy các mã ANSI như thế này:Màu ANSI trong git không được hiển thị chính xác

* ESC [33m * cam kết 0a02124a0fd85c1f0094bcdf15bac1645e3c8630ESC [m

lưu ý: màu ansi trong tác phẩm 'ls' rất tốt.

+0

Đây có thể là bản sao của http://stackoverflow.com/questions/6983305/how-to-fix-git-log-output-missing-lines-in-less - giả sử rằng bạn tính đến câu trả lời của sehe. (Tôi thực sự không biết tại sao mọi người đang cố gắng đặt 'LESS' để giúp Git ra - nó biết nó cần gì.) – Cascabel

+0

Tôi đã thiết lập LESS để sử dụng các thiết lập khác. – ben3000

Trả lời

58

Hãy thử đặt biến LESS môi trường của bạn để bao gồm các tùy chọn -R:

LESS=-R git grep ... 

Nếu công trình này, thêm export LESS=-R để ~/.bashrc hay ~/.profile hoặc tương tự tập tin khởi động shell của bạn.

-R or --RAW-CONTROL-CHARS 
      Like -r, but only ANSI "color" escape sequences are 
      output in "raw" form. Unlike -r, the screen 
      appearance is maintained correctly in most cases. 
      ANSI "color" escape sequences are sequences of the 
      form: 

       ESC [ ... m 

      where the "..." is zero or more color specification 
      characters 
+0

Cảm ơn bạn rất nhiều! – Rocky

+4

Bạn cũng có thể bỏ qua tham số cấu hình core.pager. Tôi không nghĩ rằng chỉ '-R' là lý tưởng cho Git - nó thực sự thích FRSX - và trên thực tế sẽ thiết lập nó nếu bạn chưa đặt LESS trong môi trường của bạn. – Cascabel

+1

@Jefromi: Tôi đề nghị thêm rằng như một câu trả lời, nó dễ dàng có giá trị mười điểm. :) – sarnold

4

OK, tôi hiểu rồi. Vấn đề này là để làm với biến LESS.

sau quyết tâm dòng vấn đề này:

export LESS="-erX" 
+2

Bạn nên sử dụng "-eRX" intead của "-erX" (theo câu trả lời của sarnold, ở trên). Nếu bạn sử dụng "-r" ít hơn sẽ vượt qua các ký tự điều khiển khác trực tiếp (mà bạn có thể không muốn) và ít hơn không xác định chính xác số dòng đầu ra, vì vậy một số cuộn ra khỏi màn hình (mà bạn chắc chắn không muốn). Việc sử dụng "-e" và "-X" không liên quan gì đến việc giải thích chuỗi thoát màu. "-e" khiến ít tự động thoát lần thứ hai khi bạn nhấn vào cuối tệp và "-X" "Tắt gửi chuỗi khởi tạo termcap và chuỗi khởi tạo tới thiết bị đầu cuối." – craigster0

25

Vấn đề, như những người khác đã lưu ý, đó là thiết bị đầu cuối của bạn là tốt, nhưng khi Git gọi các máy nhắn tin, nó không giải thích các mã màu ANSI một cách chính xác.

Tôi muốn bắt đầu bằng cách unsettingLESS trong môi trường của bạn; Có vẻ như trước đây bạn có thể đã đặt nó thành thứ gì đó che khuất những gì Git cần. Nếu điều đó giải quyết nó, có bạn đang có. Nếu bạn thực sự phải tùy chỉnh LESS, hãy lưu ý rằng Git bắt đầu với FRSX làm mặc định, vì vậy hãy cảnh giác với việc thay đổi chúng nếu bạn không cần.

Nếu bạn làm vì lý do gì muốn LESS trong môi trường của bạn khác với những gì bạn muốn cho Git, cách lý tưởng để đối phó với Git và máy nhắn tin là thông qua việc biến core.pager config. Để báo manpage:

Lệnh git sẽ sử dụng để phân trang đầu ra. Có thể được ghi đè bằng biến môi trường GIT_PAGER. Lưu ý rằng git đặt biến môi trường LESS thành FRSX nếu nó không được đặt khi nó chạy máy nhắn tin. Người ta có thể thay đổi các cài đặt này bằng cách đặt biến LESS thành một số giá trị khác. Ngoài ra, các cài đặt này có thể được ghi đè trên cơ sở dự án hoặc toàn cầu bằng cách đặt tùy chọn core.pager. Việc đặt core.pager không ảnh hưởng đến hành vi biến môi trường LESS ở trên, vì vậy nếu bạn muốn ghi đè cài đặt mặc định của git theo cách này, bạn cần phải rõ ràng. Ví dụ, để tắt tùy chọn S theo cách tương thích ngược, hãy đặt core.pager thành less -+$LESS -FRX. Điều này sẽ được chuyển đến trình bao bởi git, sẽ dịch lệnh cuối cùng thành LESS=FRSX less -+FRSX -FRX.

Điều đó, kết hợp với một số kiến ​​thức về các tùy chọn bạn muốn, sẽ đưa bạn đến nơi bạn muốn. (Phương pháp tương thích ngược tương thích hoạt động bằng cách tắt tất cả các tùy chọn hiện tại trong LESS, sau đó thêm lại các tùy chọn bạn muốn.)

16

Trong git, bạn có thể thay đổi pager của bạn để sử dụng -R tùy chọn:

git config --global core.pager "less -R" 
+0

Trước tiên tôi phải bỏ đặt nó, và sau đó đặt 'less -R' vào dấu ngoặc kép. Mặc dù đã làm việc. – mtfurlan

5

Đối với tôi, điều này không làm việc:

git config --global core.pager less -R

Vì vậy, thay vì i nối sau đây để tệp ~/.gitconfig của tôi

[core] 
    pager = less -R 

To kiểm tra nó tôi đã làm

git log --graph --pretty=format:"%C(yellow)%h%Creset%C(blue)%d%Creset %C(white bold)%s%Creset %C(white dim)(by %an %ar)%Creset" --all

+0

bạn cũng có thể thử công tắc "--no-pager". Ví dụ: "git --no-graph diff" –

0

Tôi có vấn đề tương tự với ANSI chuỗi màu thoát trong Git cho Windows v2.7.1 trong Laravel Artisan và Symfony console. Ở đây đề cập đến giải pháp LESS không giải quyết được sự cố.

Kể từ Git cho Windows mở thiết bị đầu cuối với bash --login -i, dòng này vào sau khi thiết bị đầu cuối bắt đầu làm việc cho tôi:

bash 
1

tôi đã cùng một vấn đề. Nhưng tại sao tôi cần phải cấu hình một git trong một máy và không cần trên một máy khác? Tôi muốn sửa chữa nguồn gốc của vấn đề vì

git config --global core.pager "ít -R"

trông giống như một cách giải quyết cho tôi.

Các vấn đề liên quan