โดยใช้เพียง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 setaf
tput setf
- การส่งออกของประปาเข้า
diff
อนุญาตให้รักษาสี ANSI ไว้ ป้องกันจากการล้างหน้าจอเมื่อออกจาก ป้องกันไม่ให้การทำงานเป็นเพจเจอร์ถ้าเอาท์พุทพอดีภายในหนึ่งหน้าจอless
-R
-X
less
-F
less
- หากพารามิเตอร์แรกคือ
@full
ฟังก์ชั่นจะแสดงบรรทัดที่ไม่เปลี่ยนแปลงทั้งหมดนอกเหนือจากการเพิ่มและลบบรรทัด
สังเกตความแตกต่างดังต่อไปนี้ระหว่างวิธีการนี้และgit diff
:
git diff
รายงานบริบทสามบรรทัดที่ล้อมรอบการเปลี่ยนแปลงแต่ละรายการ น่าเสียดายที่diff
ดูเหมือนจะบ่นและออกหากคุณต้องการระบุจำนวนบรรทัดบริบทขณะเดียวกันก็ระบุตัวเลือกการจัดรูปแบบพร้อมกัน (อย่างน้อยก็ทำใน Mac OS X Yosemite) ขอบคุณdiff
โปรแกรมเมอร์ ดังนั้นคุณสามารถขอให้ไม่มีบรรทัดบริบทที่ล้อมรอบการเปลี่ยนแปลงแต่ละอย่างซึ่งเป็นพฤติกรรมเริ่มต้นหรือคุณสามารถร้องขอให้รายงานบรรทัดที่ไม่เปลี่ยนแปลงทั้งหมดภายในไฟล์ได้โดยระบุ@full
เป็นพารามิเตอร์แรก
- เพราะสายของบริบทที่แตกต่างจากตัวเลขบรรทัดที่รายงานโดยฟังก์ชั่นนี้จะแตกต่างจากผู้ที่รายงานโดย
git diff
git diff
- คุณอาจเห็นสถานะของการเปลี่ยนแปลงบรรทัดเดียวที่รายงานซึ่งเป็นพฤติกรรมที่ถูกต้อง แต่น่ารำคาญเมื่อไฟล์ที่คุณเปลี่ยนแปลงมีการแทรกบรรทัดว่างเดี่ยว ฉันคิดว่า
git diff
ดีกว่านี้ผ่านบริบทของมัน คุณสามารถลองใช้ตัวเลือกต่าง ๆ เพื่อdiff
จัดการกับช่องว่างได้ดีขึ้นหากคุณต้องการ
newtext
/etc/colordiff
ฉันคิดว่าคอมไพล์ใช้สีเขียว