วิธีการใช้งานawkที่จะแสดงเพียง+และ-สายบัญชีสำหรับสีหรือข้อความใด ๆ ที่จัดรูปแบบgit diffอาจจะมีการแสดงผล:
ไม่ใช่หนึ่งในคำตอบอื่น ๆ ที่นี่ (รวมถึงคำตอบอื่น ๆ ของฉัน ) จะทำสิ่งที่คุณต้องการได้อย่างถูกต้อง 100% อย่างไรก็ตามคำตอบนี้จะ นี่คือ 1 ซับที่คุณสามารถคัดลอกและวางลงในเทอร์มินัลของคุณได้ ฉันเพิ่งสร้างมันขึ้นมาหลายบรรทัดเพื่อให้อ่านง่าย - คุณสามารถคัดลอกและวางแบบเดียวกันไม่ว่าจะด้วยวิธีใดก็ได้ดังนั้นฉันจึงอาจทำให้อ่านได้! มันขึ้นอยู่กับawkภาษาโปรแกรม:
git diff --color=always "$@" | awk '
# 1. Match and then skip "--- a/" and "+++ b/" lines
/^(\033\[(([0-9]{1,2};?){1,10})m)?(--- a\/|\+\+\+ b\/)/ {
next
}
# 2. Now print the remaining "+" and "-" lines ONLY! Note: doing step 1 above first was required or
# else those lines would have been matched by this matcher below too since they also begin with
# the "+" and "-" symbols.
/^(\033\[(([0-9]{1,2};?){1,10})m)?[-+]/ {
print $0
}
' | less -RFX
นี่คือคุณสมบัติของมัน เมื่อนำคุณสมบัติเหล่านี้มารวมกันจะช่วยแก้ไขข้อบกพร่องของคำตอบอื่น ๆ ทั้งหมดได้ที่นี่:
- จัดการกับเอาต์พุตสีและไม่มีสี นั่นคือสิ่งที่นิพจน์ทั่วไปทำ:
^(\033\[(([0-9]{1,2};?){1,10})m)?
- สามารถจัดการกับทุกสีและทุกรูปแบบข้อความ OPTIONS รวมทั้งตัวหนาตัวเอียงขีด ฯลฯ ซึ่งคุณสามารถตั้งค่าของคุณใน
git configการตั้งค่า นั่นเป็นเหตุผลที่ regex ด้านบนมี;?และ{1,10}อยู่ในนั้น: หากตรวจพบจุดเริ่มต้นของรหัสการจัดรูปแบบสีหรือข้อความจะจับคู่รหัส ANSI รวมกันได้สูงสุด 10 ลำดับ
มันไม่ ได้แก่ สายที่เริ่มต้นด้วย@@และคำว่าdiffเป็นคำตอบที่ได้รับการยอมรับไม่ หากคุณต้องการบรรทัดเหล่านั้น (ซึ่งตรงไปตรงมาฉันคิดว่ามีประโยชน์ :)) ให้ทำสิ่งนี้แทน:
git diff --unified=0
หรือ
git diff -U0
มันแสดงผลลัพธ์ในลักษณะเดียวกับที่ทำgit diff: ในlessเพจเจอร์ที่มีเอาต์พุตสีเสริม ( -R) และเฉพาะในกรณีที่ข้อความเป็น> 1 เพจ ( -F) และในขณะที่รักษาหน้าปัจจุบันของข้อความบนหน้าจอเมื่อคุณquit ( -X) .
นอกจากนี้ยังมีประโยชน์ในการมีประสิทธิภาพและกำหนดค่าได้ง่ายเนื่องจากใช้ภาษาโปรแกรม awk
หากคุณสนใจที่จะเรียนรู้awkนี่คือแหล่งข้อมูลบางส่วน:
gawk(GNU awk) คู่มือ: https://www.gnu.org/software/gawk/manual/html_node/index.html#SEC_Contents
- ศึกษา
git diffnและแสดงความคิดเห็นในนั้น: https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles/blob/master/useful_scripts/git-diffn.sh
- หากคุณต้องการ
git diffnเช่นกันซึ่งgit diffมีหมายเลขบรรทัดโปรดดูที่นี่: Git diff กับหมายเลขบรรทัด (บันทึก Git พร้อมหมายเลขบรรทัด)
- "สวัสดีชาวโลก" และตัวอย่างการทดสอบไวยากรณ์บางส่วน: https://github.com/ElectricRCAircraftGuy/eRCaGuy_hello_world/tree/master/awk
เพื่อเป็นโบนัสฉันได้รวบรวมข้อมูลข้างต้นเพื่อใช้เป็นgit diffcซึ่งหมายความว่า "คอมไพล์ที่แตกต่างเพื่อแสดงเฉพาะ 'c'hanges" การใช้งานที่เหมือนกันไปgit diff; แค่ใช้git diffcแทน! รองรับตัวเลือกทั้งหมด สีจะเปิดตามค่าเริ่มต้น ที่จะปิดเพียงแค่ใช้หรือgit diffc --no-color git diffc --color=neverดูman git diffรายละเอียด
เนื่องจากฉันเพิ่งทำเสร็จgit diffn(เครื่องมือที่แสดงgit diffด้วยบรรทัด 'n'umbers) เมื่อคืนนี้การเขียนgit diffcเป็นเรื่องเล็กน้อย ฉันคิดว่าฉันทำได้ดีกว่าตอนนี้ในขณะที่ความรู้ยังคงอยู่ในหัวของฉัน
ติดตั้งgit diffc:
ปฏิบัติตามคำแนะนำท้ายคำตอบที่นี่ยกเว้นทุกที่ที่คุณเห็นgit-diffnในคำแนะนำให้ใช้git-diffcแทน ซึ่งรวมอยู่ในwgetคำสั่งด้วย การดาวน์โหลดและติดตั้งgit diffcทำได้ง่ายเพียงไม่กี่คำสั่ง