ระบายสีพื้นที่สีขาวในผลลัพธ์ของ git-diff


151

เกี่ยวกับการจัดรูปแบบโค้ดฉันเป็นคนพิถีพิถัน :) ฉันมักจะลบช่องว่างสีขาวที่ไม่จำเป็นออกไป (เส้นที่มีเฉพาะ ws, ws ที่ท้ายบรรทัด ฯลฯ ) ฉันยังได้ตั้งกลุ่มเพื่อแสดงให้เห็นว่าชนิดของเส้นที่มีสีแดง

ปัญหาของฉันคือการใช้ git-diff ฉันมักจะเห็นสิ่งนี้:

-      else{ 
+      else{

แม้ว่าฉันจะมีสี git-diff แต่ฉันก็ไม่สามารถเห็นความแตกต่างได้ มีวิธีใดที่จะบอก git-diff เพื่อแสดงว่า ws เป็นสีแดงหรือไม่? (ตัวอย่างเช่นที่ตรงกับ / \ s + $ / regexp)


4
หากคุณสลับสี (สลับส่วนหน้าและพื้นหลัง) การเปลี่ยนแปลงช่องว่างเช่นนี้จะปรากฏขึ้น วิธีที่ง่ายในการทำสิ่งนี้ให้สำเร็จในเทอร์มินัลจำนวนมากคือการเน้นข้อความที่เป็นปัญหาด้วยเมาส์ เคล็ดลับนี้ใช้ได้กับดิฟที่มีสีต่างกันเท่านั้น
Phlarx

คำตอบ:


172

คุณอาจต้องตั้งค่าการตั้งค่า color.diff.whitespace เช่น:

 git config color.diff.whitespace "red reverse"

(ฉันสมมติว่าคุณมีcolor.diffหรือcolor.uiตั้งค่าไว้autoตั้งแต่ที่คุณบอกว่าคุณเห็นแพตช์สีจากgit diffนั้น)

หากคุณต้องการปรับประเภทของข้อผิดพลาดของช่องว่างที่เน้นด้วยสีแดงคุณสามารถเปลี่ยนcore.whitespaceได้ แต่blank-at-eolจะเปิดใช้งานตามค่าเริ่มต้นดังนั้นคุณอาจไม่จำเป็นต้องเปลี่ยนสิ่งนั้นสำหรับตัวอย่างที่คุณพูดถึง

แหล่งที่มาของความสับสนที่เป็นไปได้คือในผลลัพธ์ของgit diffข้อผิดพลาดของช่องว่างจะถูกเน้นเฉพาะในบรรทัดที่มีการแนะนำไม่ใช่ที่ถูกลบออก ( อัปเดต:ตามที่ Paul Whittaker ชี้ให้เห็นในคำตอบของเขาซึ่งคุณควรโหวตขึ้น :) คุณจะเห็นสิ่งเหล่านี้ได้โดยการย้อนกลับไปสู่ความแตกต่างด้วยgit diff -R)

คุณสามารถหาเอกสารเพิ่มเติมเกี่ยวกับตัวเลือกการกำหนดค่าเหล่านี้ได้ในหน้าgit config man

หากคุณไม่ต้องการใช้-Rkludge คุณสามารถใช้ตัวเลือกไฮไลต์ข้อผิดพลาด WhiteSpace ได้จากหน้าdiff ต่าง

--ws ข้อผิดพลาดไฮไลท์ =

เน้นข้อผิดพลาดของช่องว่างบนบรรทัดที่ระบุโดยในสีที่ระบุโดย color.diff.whitespace เป็นรายการที่คั่นด้วยเครื่องหมายจุลภาคของบริบทเก่าใหม่ เมื่อไม่ได้รับตัวเลือกนี้จะมีการเน้นเฉพาะข้อผิดพลาดของช่องว่างในบรรทัดใหม่ เช่น --ws-error-highlight = ใหม่ไฮไลท์เก่าเน้นข้อผิดพลาดของช่องว่างทั้งบนบรรทัดที่ถูกลบและเพิ่ม ทั้งหมดสามารถใช้เป็นทางลัดสำหรับเก่าใหม่บริบท

git diff --ws-error-highlight=new,old <file>

หรือ

git diff --ws-error-highlight=all <file>

ฉันไม่ทราบวิธีการเปิดใช้งานอย่างถาวรและเก็บสิ่งนี้ไว้ในการตั้งค่านอกเหนือจากการใช้นามแฝง:

git config alias.df 'diff --ws-error-highlight=all'

ตอนนี้คุณสามารถใช้:

git df <file>

เพื่อดูการเปลี่ยนแปลงในสีแดง

โปรดทราบว่าด้วย Git 2.11 (Q4 2016)นามแฝงนี้อาจถูกแทนที่ด้วย:

git config diff.wsErrorHighlight all

ดูเอกสารบนgit diffและบนgit config


34
"แหล่งที่มาของความสับสนที่เป็นไปได้คือในเอาต์พุตของ git diff ข้อผิดพลาดของช่องว่างจะถูกเน้นเฉพาะในบรรทัดที่ถูกนำเสนอไม่ใช่ที่ถูกลบออก" แน่นอน! และมันไม่มีวิธีที่จะแสดงให้เห็นเช่นกันสำหรับบรรทัดที่ลบออกหรือไม่ (เฮ้มันต่างกัน :))
radarek

6
เพิ่ม --global เพื่อตั้งค่าใน ~ / .gitconfig ของคุณ
simlmx

17
@radarek: คุณสามารถใช้ตัวเลือกย้อนกลับ:git diff -R
สีน้ำเงิน

6
มีรายงานข้อผิดพลาดสำหรับสิ่งนี้หรือไม่? ถ้าไม่ดูเหมือนว่าควรจะมี
Ajedi32

3
สิ่งนี้git config diff.wsErrorHighlight allใช้ได้ผล ใช้git config --global [...]เพื่อทำการเปลี่ยนแปลงทั่วโลก (เช่นส่งผลกระทบต่อ repos ทั้งหมด)
เฟลิเป้อัลวาเรซ

141

ใช้git diff -Rเพื่อเปลี่ยนบรรทัดที่ลบออกเป็นบรรทัดที่เพิ่ม จากนั้นช่องว่างต่อท้ายจะถูกเน้น

(สิ่งนี้ถือว่าคุณเปิดใช้งานการไฮไลต์สเปซแล้วตามการตั้งค่าสีจากคำตอบของ Mark เครดิตสำหรับวิธีนี้ไปที่โพสต์ของ Junio ​​ที่http://git.661346.n2.nabble.com/Highlighting-whitespace-on-removal- with-git-diff-td5653205.html )

ตัวอย่างเช่นเมื่อแปลงไฟล์จากปลายสาย DOS เป็น Unix git diff -Rจะแสดง^Mอักขระ (dis) ที่ปรากฏที่ส่วนท้ายของบรรทัดอย่างชัดเจน หากไม่มี-R(และไม่มี-wเป็นต้น) จะแสดงว่าไฟล์ทั้งหมดเปลี่ยนแปลง แต่ไม่แสดงว่า


4
แน่นอนคุณสามารถทำได้git diff | cat -A | less -Sหากคุณหมดหวัง แต่นอกเหนือจากการรับคืนรถแล้วcatจะแสดงสีใด ๆ ที่เน้นรหัสหลบหนีอย่างแท้จริง
Paul Whittaker

3
@Paul_Whittaker cat -Aไม่สามารถพกพาได้ บน BSD cat ไม่มีตัวเลือกดังกล่าว กรุณาใช้cat -vetแทน
7heo.tk

9

git diff --color | less -Rใช้ -Rทำให้การควบคุมรหัสสีเป็นมิตรกับมนุษย์

จากนั้นคุณสามารถใช้lessการค้นหานิพจน์ปกติเช่น

/[[:space:]]+$

การแสดงออกปกตินี้ยังใช้งานได้vimโดยวิธี
Jose Alban

ความคิดนี้สุดท้ายของless -Rเพียงแค่ทำให้มันง่ายขึ้นสำหรับผมที่จะท่อผ่านls --color less
Menachem

0

เวอร์ชันของฉันgit diffดูเหมือนจะทำแล้ว - ฉันมี git 1.7.4.1 และตั้งค่าไว้color.ui = autoแล้ว


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