โดยใช้เพียงbash, diff, tputและเราสามารถใกล้ชิดใกล้เคียงกับการส่งออกของless git diffจะมีความแตกต่างที่โดดเด่นบางอย่างเนื่องจากการสายตาสั้นของdiffโปรแกรมเมอร์
ใส่คำนิยามฟังก์ชั่น Bash ต่อไปนี้ในไฟล์บางไฟล์ที่ได้รับมาจากบัญชีผู้ใช้ของคุณโดยอัตโนมัติและคุณจะสามารถเข้าถึงฟังก์ชั่นได้จากบรรทัดคำสั่ง:
function gdiff()
{
local REG=`tput op`
local GRP=`tput setaf 6`
local ADD=`tput setaf 2`
local REM=`tput setaf 1`
local NL=$'\n'
local GRP_LABEL="${GRP}@@ %df,%dn +%dF,%dN @@${REG}"
local UNCH_GRP_FMT=''
[[ "${1}" == '@full' ]] && {
UNCH_GRP_FMT="${GRP_LABEL}${NL}%="
shift
}
diff \
--new-line-format="${ADD}+%L${REG}" \
--old-line-format="${REM}-%L${REG}" \
--unchanged-line-format=" %L${REG}" \
--new-group-format="${GRP_LABEL}${NL}%>" \
--old-group-format="${GRP_LABEL}${NL}%<" \
--changed-group-format="${GRP_LABEL}${NL}%<%>" \
--unchanged-group-format="${UNCH_GRP_FMT}" \
"${@}" | less -FXR
}
ฟังก์ชั่นนี้ทำงานดังต่อไปนี้:
- ในที่สุด
diffได้รับการเรียกใช้กับตัวเลือกการจัดรูปแบบต่างๆเพื่อระบุวิธีการเปลี่ยนแปลงภายในไฟล์ที่จะแสดง
tputใช้เพื่อแทรกรหัสสี ANSI ลงในตัวเลือกการจัดรูปแบบเหล่านั้น หมายเหตุว่าเมื่อใช้ขั้วไม่ใช่ ANSI คุณอาจต้องเปลี่ยนด้วยtput setaftput setf
- การส่งออกของประปาเข้า
diff อนุญาตให้รักษาสี ANSI ไว้ ป้องกันจากการล้างหน้าจอเมื่อออกจาก ป้องกันไม่ให้การทำงานเป็นเพจเจอร์ถ้าเอาท์พุทพอดีภายในหนึ่งหน้าจอless-R-Xless-Fless
- หากพารามิเตอร์แรกคือ
@fullฟังก์ชั่นจะแสดงบรรทัดที่ไม่เปลี่ยนแปลงทั้งหมดนอกเหนือจากการเพิ่มและลบบรรทัด
สังเกตความแตกต่างดังต่อไปนี้ระหว่างวิธีการนี้และgit diff:
git diffรายงานบริบทสามบรรทัดที่ล้อมรอบการเปลี่ยนแปลงแต่ละรายการ น่าเสียดายที่diffดูเหมือนจะบ่นและออกหากคุณต้องการระบุจำนวนบรรทัดบริบทขณะเดียวกันก็ระบุตัวเลือกการจัดรูปแบบพร้อมกัน (อย่างน้อยก็ทำใน Mac OS X Yosemite) ขอบคุณdiffโปรแกรมเมอร์ ดังนั้นคุณสามารถขอให้ไม่มีบรรทัดบริบทที่ล้อมรอบการเปลี่ยนแปลงแต่ละอย่างซึ่งเป็นพฤติกรรมเริ่มต้นหรือคุณสามารถร้องขอให้รายงานบรรทัดที่ไม่เปลี่ยนแปลงทั้งหมดภายในไฟล์ได้โดยระบุ@fullเป็นพารามิเตอร์แรก
- เพราะสายของบริบทที่แตกต่างจากตัวเลขบรรทัดที่รายงานโดยฟังก์ชั่นนี้จะแตกต่างจากผู้ที่รายงานโดย
git diffgit diff
- คุณอาจเห็นสถานะของการเปลี่ยนแปลงบรรทัดเดียวที่รายงานซึ่งเป็นพฤติกรรมที่ถูกต้อง แต่น่ารำคาญเมื่อไฟล์ที่คุณเปลี่ยนแปลงมีการแทรกบรรทัดว่างเดี่ยว ฉันคิดว่า
git diffดีกว่านี้ผ่านบริบทของมัน คุณสามารถลองใช้ตัวเลือกต่าง ๆ เพื่อdiffจัดการกับช่องว่างได้ดีขึ้นหากคุณต้องการ
newtext/etc/colordiffฉันคิดว่าคอมไพล์ใช้สีเขียว