ทำไมสี git ถึงไม่ปรากฏเมื่อใช้งานนาฬิกา


10

เมื่อทำงานgit status -sbฉันเห็น:

ป้อนคำอธิบายรูปภาพที่นี่

ฉันต้องการwatch(จาก procps-ng 3.3.3) ที่เก็บ --colorตัวเลือกที่ควรจะเก็บสี


น่าสนใจใช้ได้กับls:

$ watch --color "ls --color"

แสดง:

ออกจาก ls


อย่างไรก็ตามสำหรับgitสีที่หายไป:

$ watch --color "git status -sb"

ป้อนคำอธิบายรูปภาพที่นี่


เหตุใดจึงwatchแสดงสีจากlsแต่ไม่ใช่จากgitเอาต์พุต


ที่เกี่ยวข้อง: stackoverflow.com/questions/3793126/…
jobin

@Jobin ขอบคุณที่จริงผมแสดงความคิดเห็นได้ที่ลิงค์ว่าก่อนที่จะโพสต์คำถามนี้ :)
Drew Noakes

คำตอบ:


5

ข้อความต่อไปนี้เป็นจริง:

  • watchรันคำสั่งในเชลล์ใหม่, sh.
  • .bashrcนามแฝงlsว่าls --color=autoจะเปิดใช้งานสี
  • shไม่สืบทอดหรือใช้bashนามแฝง

ดังนั้นเมื่อwatchวิ่งไปlsมันไม่ได้ถามหาสี แต่เป็นรุ่นเก่าธรรมดา คุณสามารถหลีกเลี่ยงสิ่งนี้ แต่ - ตามที่ aditya ชี้ให้เห็น - คุณต้องเปิดใช้สีwatchเพื่อให้สามารถประมวลผลได้อย่างถูกต้อง

ตัวอย่างการทำงานสำหรับlsคือ:

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

หากคุณไม่ผ่าน--colorการดูคุณจะเห็นรหัสสีน่าเกลียดมากมาย


ls --colorls --color=alwaysถูกตีความว่าเป็น

ls --color=auto ไม่พิมพ์สีในนาฬิกา นี่เป็นการชี้ให้เห็นว่ามันรองรับการใช้สีจากขั้วของมันเอง

สำหรับเหตุผลเพิ่มเติมว่าทำไมเราสามารถทดสอบว่าเชลล์นาฬิกาคิดว่าเป็นเทอร์มินัลตัวจริงหรือไม่ :

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

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

ฉันสงสัยว่ามีแอปพลิเคชั่นบางตัวกำลังดู (หรือคล้ายกัน) เพื่อบอกว่าควรเปิดสีหรือไม่


3
แต่ OP ต้องการทราบว่าทำไมมันถึงไม่ทำงานgit status -sbแม้ว่ามันจะใช้งานls --colorได้
jobin

มันสมเหตุสมผลแล้ว gitอย่างไรก็ตามมีนามแฝงไม่ สีจะตั้งอยู่ภายในการกำหนดค่าคอมไพล์โดยตรง ดังนั้นนี่ไม่ใช่ปัญหาเรื่องนามแฝง
Drew Noakes

การเล่นชนิดหนึ่ง ฉันจะตั้งค่าสีของฉันautoตามที่คุณคาดเดาได้อย่างถูกต้องทำให้ git หลีกเลี่ยงการแสดงผลสี การใช้alwaysแทนช่วยแก้ไขปัญหานี้ได้ ขอบคุณมาก!
Drew Noakes

9

git ใช้ค่าการกำหนดค่าเพื่อกำหนดว่าจะแสดงเอาต์พุตสีหรือไม่

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

git config --global color.ui auto

การตั้งค่านี้เป็นการตั้งค่าสีเป็นแบบautoโกลบอล ในautoโหมด git จะพิจารณาว่าเป็นเทอร์มินัลจริงหรือไม่ก่อนส่งรหัสสีตามที่ Oli แนะนำ

คุณสามารถบังคับค่าส่วนกลางนี้ให้กับalwaysอย่างไรก็ตามความคิดที่ดีกว่าอาจนำไปใช้กับคำสั่งเฉพาะ:

git -c color.status=always status -sb

วางมันทั้งหมดเข้าด้วยกัน:

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

0

ใช้งานได้ถ้าgit( --color) และwatch( -c) ถูกบอกให้ใช้สี:

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