git diff - แสดงการเปลี่ยนแปลงสิ้นสุดบรรทัดหรือไม่


86

ตัวแก้ไขของฉันกำลังเปลี่ยนการลงท้ายบรรทัดของไฟล์ต้นฉบับของฉัน เมื่อฉันทำฉันจะgit diffเห็นบรรทัดเดิมสองครั้ง - ครั้งเดียว-และครั้งเดียว+- โดยไม่เห็นความแตกต่าง

ฉันgit diffจะแสดงให้ฉันเห็นได้อย่างไรว่าการเปลี่ยนแปลงนี้คืออะไร?


ใกล้เคียงกับสิ่งนี้ (ที่กล่าวถึงด้านล่าง): รายการโปรดของฉันคือgit config diff.wsErrorHighlight all
Joshua Goldberg

คำตอบ:


64

ขั้นแรกตรวจสอบให้แน่ใจว่าคุณใช้เอาต์พุตสี (เช่นกับgit diff --color) และคุณได้เปิดใช้งานการเน้นช่องว่างด้วย (เช่น)

git config color.diff.whitespace "red reverse"

อย่างไรก็ตามอาจใช้ไม่ได้ในทุกกรณีเนื่องจากgitไม่ได้เน้นช่องว่างต่อท้ายสำหรับบรรทัดที่ถูกลบ หากต้องการดูช่องว่างที่คุณลบไปเพียงแค่ใช้

git diff -R

เพื่อใส่ช่องว่างที่ด้าน 'เพิ่ม' ของการเปรียบเทียบซึ่งจะถูกไฮไลต์

สำหรับรายละเอียดเพิ่มเติมโปรดดูคำตอบที่คำถาม SOนี้


ฉันมี git เวอร์ชัน 2.1.4 และฉันดำเนินการตามคำแนะนำคำสั่ง git config แต่ git diff ก็ยังไม่แสดงความแตกต่าง ถ้าฉันไปป์ git ต่างกับ hexdump -C จะไม่มีอะไรแสดงที่นั่นเลย: 000000f0 2d 2d 7d 0a 2b 2b 7d 0a |--}.++}.|7d คือเครื่องหมายปีกกา '}'
cardiff space man

37

คุณสามารถดูความแตกต่างของการสิ้นสุดบรรทัดด้วยคำสั่งต่อไปนี้

git diff | cat -v

จากนั้นจะพิมพ์ "^ M" สำหรับการลงท้าย CRLF (DOS) โดยไม่มีการสิ้นสุด LF (Unix)

เห็นได้ชัดว่า git diff กำลังทำสิ่งที่ถูกต้องพิมพ์อักขระ CR และ LF สำหรับการสิ้นสุด CRLF แต่เนื่องจาก CR ถูกใช้โดยคอนโซลเราจึงไม่สามารถมองเห็นได้ การใช้ cat -v ทำให้เราสามารถมองเห็นได้


อีกวิธีหนึ่งที่คล้ายกันคือgit diff > somediff && vi somediffกลุ่มแสดง CRLF เป็น ^ M เช่นกัน แต่cat -vเรียบร้อย
Nick X

1
+1 ไม่น้อยที่ให้ฉันเรียนรู้หลังจากใช้งานมา 20 ปีซึ่งเป็นตัวเลือกcatที่ฉันไม่รู้ :-)
Harald

25

วิธีหนึ่งในการดูการเปลี่ยนแปลงช่องว่างคือการสร้าง "word diff" แบบอักขระทีละอักขระ

git diff --color --word-diff-regex=.

ไฮไลท์นี้ช่องว่างการเปลี่ยนแปลงทั้งหมดในทุกสาย ช่องว่างที่นำออกไปเป็นห่อ[-และ-]และเพิ่มช่องว่างในและ{++}

หรืออีกวิธีหนึ่งตามคำแนะนำของ Alex

git diff --color --ws-error-highlight=new,old

ไฮไลท์การเปลี่ยนแปลงทั้งหมดที่ช่องว่างที่ปลายของเส้น


13
git diff --ws-error-highlight=new,old

ไฮไลต์ช่องว่างแตกต่างกันในบรรทัดที่เปลี่ยนแปลง


คุณใช้คอมไพล์เวอร์ชันใด git 2.1.4 ในระบบของฉันบอกว่า --ws-error-highlight = new, old เป็นตัวเลือกที่ไม่ถูกต้อง
cardiff space man

ตัวเลือกนี้ถูกเพิ่มในปี 2015 ใน git 2.5.0
MiniGod

5

เครื่องมือต่างกราฟิกจะแสดงให้คุณเห็นการเปลี่ยนแปลงที่ดีกว่า - git difftoolลอง

ใช้meldและตั้งค่ากำหนดเพื่อแสดงช่องว่าง (แก้ไข -> ค่ากำหนด -> แสดงช่องว่าง)

เครื่องมือกราฟิกอื่น ๆ อาจมีตัวเลือกที่คล้ายกัน - คำตอบ + ความคิดเห็นของ @ Cotton บอกวิธีการทำสิ่งนี้ด้วย vimdiff


อาจไม่มีเครื่องมือแสดงผลกราฟิก คำตอบโดย @ paul-whittaker จะทำงานในบริบทโดยนัยของคำถาม (บางขั้ว)
61

ตอนนี้มันแปลก แต่git difftool --tool=meld doesn'tก็เปิดตัว meld ฉันไม่รู้ว่าเป็นเพราะกำลังดำเนินการ rebase หรือไม่
cardiff space man
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.