Tại sao màu git không xuất hiện khi sử dụng đồng hồ?


10

Khi chạy git status -sbtôi thấy:

nhập mô tả hình ảnh ở đây

Tôi muốn watch(từ Procps-ng 3.3.3) một kho lưu trữ. Các --colortùy chọn được cho là để giữ màu sắc.


Thật thú vị, nó hoạt động với ls:

$ watch --color "ls --color"

Hiển thị:

đầu ra từ ls


Tuy nhiên, đối với gitcác màu biến mất:

$ watch --color "git status -sb"

nhập mô tả hình ảnh ở đây


Vì vậy, tại sao watchhiển thị màu sắc từ lsnhưng không phải từ gitđầu ra?



@Jobin, cảm ơn, tôi thực sự đã nhận xét tại liên kết đó trước khi đăng câu hỏi này :)
Drew Noakes

Câu trả lời:


5

Các tuyên bố sau là đúng:

  • watchchạy lệnh trong một vỏ mới , sh.
  • .bashrcbí danh lsnhư ls --color=autođể kích hoạt màu sắc.
  • shkhông kế thừa hoặc sử dụng bashbí danh.

Vì vậy, khi watchchạy ls, nó không yêu cầu màu sắc, nó chỉ chạy phiên bản cũ đơn giản. Bạn có thể phá vỡ điều này nhưng vì Aditya chỉ ra rằng bạn cũng cần bật màu watchcho nó để xử lý chúng đúng cách.

Một ví dụ hoạt động cho lslà:

watch --color -- ls --color=always

Nếu bạn không vượt qua --colorđể xem, bạn sẽ thấy một loạt các mã màu xấu xí.


ls --colorđược hiểu là ls --color=always.

ls --color=auto không in màu trong đồng hồ. Điều này cho thấy rằng nó suy ra hỗ trợ màu từ chính thiết bị đầu cuối.

Để biết thêm về lý do tại sao, chúng ta có thể kiểm tra xem vỏ đồng hồ có nghĩ là thiết bị đầu cuối thực sự hay không :

$ bash -c '[[ -t 1 ]] && echo "real terminal"'
real terminal

$ watch -- "bash -c '[[ -t 1 ]] && echo "real terminal"'"
# ... nothing.

Tôi nghi ngờ rằng một số ứng dụng đang xem xét điều đó (hoặc tương tự) để cho biết liệu chúng có nên bật màu hay không.


3
Nhưng OP muốn biết tại sao điều này không hoạt động git status -sb, mặc dù nó hoạt động với ls --color.
việc

Điều này thật ý nghĩa. Tuy nhiên không có bí danh cho git. Màu sắc được đặt trực tiếp trong cấu hình của git . Vì vậy, điều này dường như không phải là một vấn đề răng cưa.
Drew Noakes

Chơi lô tô. Tôi đã đặt màu của mình theo autođó, như bạn đã phỏng đoán chính xác, đã khiến git tránh đầu ra màu. Sử dụng alwaysthay thế đã giải quyết vấn đề này. Cảm ơn nhiều!
Drew Noakes

9

git sử dụng giá trị cấu hình để xác định xem có hiển thị đầu ra màu hay không.

Ví dụ:

git config --global color.ui auto

Điều này đặt cài đặt màu thành autotoàn cầu. Trong autochế độ, git sẽ xác định xem đó có phải là thiết bị đầu cuối thực sự hay không trước khi gửi mã màu, như Oli đề xuất.

Bạn có thể buộc giá trị toàn cầu này always, tuy nhiên một ý tưởng tốt hơn có thể là áp dụng nó cho một lệnh cụ thể:

git -c color.status=always status -sb

Để tất cả chúng cùng nhau:

watch --color git -c color.status=always status -sb

0

Nó hoạt động nếu git( --color) và watch( -c) được yêu cầu sử dụng màu sắc:

watch -cd "git branch -va --color"
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.