เน้นเส้นที่เปลี่ยนแปลงและไบต์ที่เปลี่ยนแปลงในแต่ละบรรทัดที่เปลี่ยนแปลง


94

โครงการโอเพ่นซอร์สTracมีปากกาเน้นข้อความที่แตกต่างกัน - ไฮไลต์เส้นที่เปลี่ยนไปและไบต์ที่เปลี่ยนไปในแต่ละบรรทัดที่เปลี่ยนไป! ดูที่นี่หรือที่นี่สำหรับตัวอย่าง

มีวิธีใช้ไฮไลต์สีเดียวกัน (เช่นเปลี่ยนเส้นและเปลี่ยนไบต์ด้วย ) ใน bash terminal gitหรือvim สำหรับ diff output (patch-file)?


อะไรคือสิ่งที่คุณต้องการเน้น? คุณต้องการเครื่องมือที่แตกต่างที่ไฮไลต์การเปลี่ยนแปลงไบต์หรือไม่? (ซึ่งจะเป็นประโยชน์มาก) คุณพูดเป็นกลุ่มสำหรับกลุ่มความทรงจำของฉันมีการจัดการสีจำนวนมากอยู่แล้วเมื่อคุณใช้เทมเพลตภาษาโปรแกรม (และอื่น ๆ ) คุณจะเปลี่ยนมันอย่างไร? มีเทคนิคไม่กี่อย่างในการเปลี่ยนสีบนหน้าต่างเทอร์มินัลที่กำหนดไว้ VT100 (และมีคำจำกัดความอื่น ๆ อีกมากมายที่จะรองรับลำดับการหลีกเลี่ยงสีด้วย) โปรดดูรายละเอียดเพิ่มเติม หรืออ่านen.wikipedia.org/wiki/VT100และลิงก์ที่เกี่ยวข้อง บางทีนั่นอาจช่วยได้
เชลล์เตอร์

ฉันรู้ว่าคุณสนใจเฉพาะเครื่องมือโอเพนซอร์สและเฉพาะในเทอร์มินัลเท่านั้น แต่เพื่อเป็นจุดอ้างอิงคุณอาจต้องการดู diffzilla ของ slickedit จากเครื่องมือที่แตกต่างบางอย่างที่ฉันใช้ดูเหมือนว่าจะแสดงถึงความแตกต่างของอักขระได้ดีที่สุดเสมอ (แม้ว่าจะมีปัญหาอย่างแน่นอนเมื่อความแตกต่างที่ซับซ้อน (การรวมกันของการจัดรูปแบบและการเปลี่ยนแปลงโค้ดซึ่งเป็นความคิดที่ไม่ดีเสมอ)
เมื่อ

ดูเหมือนการซ้อนทับของstackoverflow.com/questions/3231759/…
Adam Monsen

หมายเหตุ: ตอนนี้ GitHub นำเสนอเครื่องมือที่แตกต่างใน Web GUI: stackoverflow.com/a/25723584/6309
VonC

ฉันได้โพสต์ 'ยังอีก' git บริสุทธิ์โซลูชันที่ใช้ไฮไลต์ที่แตกต่างพร้อมแบบฝึกหัดเพื่อให้ 1) ค้นหาไฟล์ไฮไลต์ต่างที่เกี่ยวข้อง 2) ทำให้สามารถเรียกใช้งานได้ 3) ตั้งค่าพารามิเตอร์ที่จำเป็นใน. gitconfig โปรดดู คำแนะนำมีไว้สำหรับ Ubuntu 18.04 แต่ควรทำงานในวงกว้างบนระบบ linux
Zorglub29

คำตอบ:


60

diff-highlightสคริปต์ contrib Perlผลิตออกจึงคล้ายกับที่ของภาพหน้าจอ Trac ว่ามันเป็นไปได้ว่า Trac ใช้มัน

ป้อนคำอธิบายภาพที่นี่

ติดตั้งด้วย:

wget https://raw.githubusercontent.com/git/git/fd99e2bda0ca6a361ef03c04d6d7fdc7a9c40b78/contrib/diff-highlight/diff-highlight && chmod +x diff-highlight

ย้ายไฟล์diff-highlightไปที่~/bin/ไดเร็กทอรี (หรือทุกที่ที่คุณ$PATHอยู่) จากนั้นเพิ่มสิ่งต่อไปนี้ใน~/.gitconfig:

[pager]
        diff = diff-highlight | less
        log = diff-highlight | less
        show = diff-highlight | less

การติดตั้งการวางสำเนาเดียวที่แนะนำโดย @cirosantilli:

cd ~/bin
curl -O https://raw.githubusercontent.com/git/git/fd99e2bda0ca6a361ef03c04d6d7fdc7a9c40b78/contrib/diff-highlight/diff-highlight
chmod +x diff-highlight
git config --global pager.log 'diff-highlight | less'
git config --global pager.show 'diff-highlight | less'
git config --global pager.diff 'diff-highlight | less'
git config --global interactive.diffFilter diff-highlight

นี้. ยอดเยี่ยมมาก ขอบคุณ. ดูเหมือนว่าจะค่อนข้างอนุรักษ์นิยมในบางสถานที่ แต่ขาดบางบรรทัดที่เห็นได้ชัดว่ามีข้อความส่วนใหญ่เหมือนกัน คุณมีตัวติดตามข้อผิดพลาดหรือไม่?
naught101

21
อานี่เป็นส่วนหนึ่งของคอมไพล์หลักตอนนี้: github.com/git/git/tree/master/contrib/diff-highlight
naught101

2
ตอนนี้เปลี่ยนเป็นโมดูลแล้วและฉันคิดว่าเวอร์ชันที่ง่ายที่สุดในการดาวน์โหลดคือเวอร์ชันก่อนการเปลี่ยนแปลงที่raw.githubusercontent.com/git/git/…
Chris Midgley

4
ไม่เพียง แต่เป็นส่วนหนึ่งของ core git เท่านั้น แต่ยังแจกจ่ายด้วย git และอาจมีอยู่แล้วในระบบของคุณ ฉันได้เพิ่มรายละเอียดเกี่ยวกับวิธีการเปิดใช้งานในคำตอบด้านล่าง ↓
Cory Klein

2
นี้บอลเฉียง diffs git add -pที่คุณเห็นผ่านทาง โปรดเพิ่ม:git config --global interactive.diffFilter diff-highlight
josch

41

ในขณะที่ใช้git diffหรือgit logและอื่น ๆ ให้ใช้ตัวเลือก--word-diff=color(นอกจากนี้ยังมีโหมดอื่น ๆ สำหรับ word diffs BTW)


2
--word-diff=colorดีกว่าจริงๆ (โดยเฉพาะกับgit config color.diff.old "red reverse"และgit config color.diff.new "green reverse") แต่มันไม่ใช่สิ่งที่ฉันต้องการ :(
Nikolay Frantsev

4
สิ่งเดียวที่คุณขาดหายไปคือการทำเครื่องหมายด้วยสี / ทั้งเส้นและไบต์ที่เปลี่ยนไปในเวลาเดียวกัน?
anydot

7
ฉันต้องการเน้นบรรทัดที่เปลี่ยนแปลงและไบต์ที่เปลี่ยนแปลงในแต่ละบรรทัดที่เปลี่ยนแปลงเช่นใน Trac ไม่ใช่แค่ไบต์ที่เปลี่ยน แต่มันไม่เหมือนกัน
Nikolay Frantsev

คุณสามารถใช้สิ่งนี้กับgit add --patch: stackoverflow.com/questions/10873882/…
naught101

ข้อดีของdiff-highlightคือมันทำงานได้ดีสำหรับทั้งคำที่แตกต่างและความแตกต่างของบรรทัด
Ciro Santilli 郝海东冠状病六四事件法轮功

21

diff-so-fancyคือ - diffปากกาเน้นข้อความที่ออกแบบมาสำหรับดวงตาของมนุษย์

จะลบส่วนนำ+/ -ซึ่งน่ารำคาญสำหรับการตัด / วางและทำให้ส่วนที่ชัดเจนระหว่างไฟล์

สีgit(ซ้าย) เทียบกับdiff-so-fancy(ขวา - สังเกตไฮไลต์ระดับตัวละคร):

เอาต์พุตที่แตกต่างกันมาก

หากคุณต้องการdiff-so-fancyเอาต์พุต (ด้านขวา) แต่ไม่ จำกัด เฉพาะไฟล์ในที่gitเก็บให้เพิ่มฟังก์ชันต่อไปนี้.bashrcเพื่อใช้กับไฟล์ใด ๆ :

dsf() { git diff --no-index --color "$@" | diff-so-fancy; }

เช่น:

dsf original changed-file

การเน้นระดับตัวอักษรและdiffรูปแบบมาตรฐาน

หากคุณไม่ชอบการจัดรูปแบบที่ไม่ได้มาตรฐานdiff-so-fancyแต่ยังคงต้องการการgitเน้นระดับอักขระให้ใช้diff-highlightซึ่งจะใช้gitผลลัพธ์และสร้างdiffเอาต์พุตรูปแบบมาตรฐานที่สวยงามจริงๆ:

ภาพหน้าจอไฮไลต์ที่แตกต่างกัน

หากต้องการใช้งานตามค่าเริ่มต้นgitให้เพิ่มใน.gitconfig:

[color "diff-highlight"]
  oldNormal = red bold
  oldHighlight = red bold 52
  newNormal = green bold
  newHighlight = green bold 22

[pager]
  diff = diff-highlight | less -FRXsu --tabs=4

[pager]ส่วนบอกgitกับท่อเอาท์พุท colourised อยู่แล้วในการdiff-highlightที่ colourises ในระดับตัวละครแล้วหน้าการส่งออกในเวลาน้อย (ถ้าจำเป็น) lessมากกว่าเพียงแค่ใช้ค่าเริ่มต้น


สิ่งนี้น่าสนใจมากคุณช่วยอธิบายเกี่ยวกับgitconfigตัวเลือกเหล่านี้ได้ไหม
caesarsol

dsf()การปรับปรุงการเพิ่มฟังก์ชั่นนอกจากนี้ยังมี
Tom Hale

15

พฤติกรรมที่คุณต้องการมีอยู่ในคอมไพล์แล้ว (ตามที่ระบุไว้ในความคิดเห็นโดย naught101) ในการเปิดใช้งานคุณต้องตั้งค่าเพจเจอร์ของคุณเป็น

perl /usr/share/doc/git/contrib/diff-highlight/diff-highlight | less

/usr/share/doc/git/contrib/diff-highlight/diff-highlightตำแหน่งของสคริปต์ปากกาเน้นข้อความบน Ubuntu 13.10 อยู่ที่ไหน(ฉันไม่รู้ว่าทำไมจึงอยู่ในdocโฟลเดอร์) หากไม่มีในระบบของคุณให้ลองใช้locate diff-highlightเพื่อค้นหา โปรดทราบว่าสคริปต์ไฮไลต์ไม่สามารถทำงานได้ (อย่างน้อยก็ในเครื่องของฉัน) ดังนั้นข้อกำหนดสำหรับperl.

หากต้องการใช้ปากกาเน้นข้อความสำหรับคำสั่งที่แตกต่างกันเพียงแค่เพิ่มสิ่งต่อไปนี้ใน~/.gitconfigไฟล์ของคุณ:

[pager]
    log = perl /usr/share/doc/git/contrib/diff-highlight/diff-highlight | less
    show = perl /usr/share/doc/git/contrib/diff-highlight/diff-highlight | less
    diff = perl /usr/share/doc/git/contrib/diff-highlight/diff-highlight | less

ฉันเพิ่มสิ่งนี้เป็นคำตอบใหม่ความคิดเห็นของ naught101 ถูกฝังอยู่และเนื่องจากการตั้งค่านั้นไม่ค่อยน่าสนใจเท่าที่ควรและอย่างน้อยก็ใน Ubuntu รุ่นที่ฉันมีคำแนะนำในREADMEไม่ทำงาน


ฉันเพิ่งสังเกตว่าสิ่งนี้ไม่ได้เปิดใช้งานการไฮไลต์สำหรับความแตกต่างภายในgit add -p(โหมดโต้ตอบ) ฉันไม่รู้ว่าจะแก้ไขได้อย่างไรเพียงแค่เพิ่มเพิ่มในรายการทำให้รายการค้าง
dshepherd

5
ตอนนี้ควรใช้งานได้แล้วใน git 2.9.0:git config interactive.diffFilter diff-highlight
Thomas

^ นี่! น่าเสียดายที่diff-highlightไม่ได้อยู่บนเส้นทางของฉันดังนั้นฉันจึงต้องหามันก่อน รายละเอียดในคำตอบของฉันด้านล่าง
Cory Klein

11

ยูทิลิตี้สำหรับ diffs ไบต์ตามที่ได้รับการแจกจ่ายอย่างเป็นทางการตั้งแต่ Git v1.7.8 1 คุณต้องค้นหาตำแหน่งที่ติดตั้งบนเครื่องของคุณและเปิดใช้งาน

ค้นหาตำแหน่งที่ติดตั้ง Git

  • MacOS ที่ติดตั้ง Git ผ่านHomebrew : มันคือ/usr/local/opt/git
  • Windows พร้อมGit สำหรับ Windows : เรียกใช้cd / && pwd -Wเพื่อค้นหาไดเร็กทอรีการติดตั้ง
  • ลินุกซ์: Nerd หากคุณไม่ทราบว่าติดตั้ง Git ไว้ที่ไหนll $(which git)หรือlocate gitควรช่วย

ลิงก์diff-highlightไปยังไดเร็กทอรี bin ของคุณเพื่อให้ PATH ของคุณสามารถค้นหาได้

GIT_HOME='/usr/local/opt/git/'  # Use the value from the first step.
ln -s "${GIT_HOME}/share/git-core/contrib/diff-highlight/diff-highlight" \
      '/usr/local/bin/diff-highlight'

เปิดใช้งานในการกำหนดค่า Git ของคุณ

git config --global interactive.diffFilter diff-highlight # Use on interactive prompts
git config --global pager.diff "diff-highlight | less"    # Use on git diff
git config --global pager.log  "diff-highlight | less"    # Use on git log
git config --global pager.show "diff-highlight | less"    # Use on git show

1นี่คือเวอร์ชัน v1.7.8แต่มีการเปลี่ยนแปลงมากมายตั้งแต่นั้นมา


1
จะเป็นการดีที่จะระบุว่าเวอร์ชันใดเริ่มเผยแพร่ด้วยคอมไพล์ ฉันเดาว่า distros จะวางไว้ใน PATH โดยค่าเริ่มต้นดังนั้นจึงไม่จำเป็นต้องใช้ขั้นตอน symlink? และwhich gitกำหนดให้มันอยู่ใน PATH ตั้งแต่แรกดังนั้นมันจะไม่ทำงานถ้ามันไม่ :-)
Ciro Santilli 郝海东冠状病六四事件法轮功

2
คงจะดี! อย่าลังเลที่จะเพิ่มข้อมูลนั้น และแม้ว่า Git จะรวมกลุ่มdiff-highlightแต่ก็ไม่ได้ติดตั้งจริงดังนั้นขั้นตอน symlink จึงจำเป็นอย่างยิ่ง (อย่างน้อยใน macOS) หากคุณพบว่าไม่จำเป็นสำหรับแพลตฟอร์มของคุณโปรดอัปเดตคำตอบอีกครั้ง ในขณะเดียวกันwhich gitมักจะไม่ทำงานเพราะ Git ไม่ติดตั้งgitที่ไหนสักแห่งไบนารีบนเส้นทาง
Cory Klein

โปรดทราบว่าในเดเบียนไม่เสถียรฉันต้อง "คอมไพล์" ไฟล์นี้เพราะฉันมีไฟล์.perl. การคอมไพล์เป็นเรื่องเล็กน้อย: เพียงแค่เรียกใช้sudo makeในdiff-highlightไดเร็กทอรี
tobiasBora

10

ฉันใช้--color-wordsตัวเลือกและมันก็ใช้ได้ดีสำหรับฉัน:

$ git diff --color-words | less -RS

5
ไม่นี่แสดงเฉพาะความแตกต่างของคำ สิ่งที่ OP (และฉัน) ต้องการคือความแตกต่างแบบทีละบรรทัดตามปกติโดยมีการเน้นความแตกต่างของคำ (ดังนั้นให้บอกว่าบรรทัดต่างๆเป็นข้อความสีและความแตกต่างของคำภายในบรรทัดเหล่านั้นคือข้อความสีปกติโดยมีการเน้นสีหรือ บางสิ่งบางอย่าง) ดูลิงก์ตัวอย่างตอนนี้ในคำถาม
naught101

1
pastebin.com/1JrhYHRtจริงๆแล้วฉันใช้ vimdiff เป็น difftool และ vimdiff กับ molokai colorscheme เพื่อให้ได้ไฮไลต์ที่ดีตามที่คุณอธิบายในคำถามของคุณ 1- git config --global diff.tool vimdiff 2- in vim ": colo molokai" * Molokai @ github.com/tomasr/molokai * Auto colorscheme with ~ / .vimrc: if & diff set background = dark colorscheme molokai endif
แก้ไข

4

ตามที่@dshepherd พูดว่า :

พฤติกรรมที่คุณต้องการมีอยู่ในคอมไพล์แล้ว

แต่diff-highlightตั้งอยู่ใน DOC และไม่สามารถใช้ได้จากเชลล์
ในการติดตั้งdiff-highlightใน~/binไดเร็กทอรีของคุณให้ทำตามขั้นตอนต่อไป (ซึ่งจะช่วยประหยัดการพิมพ์ของคุณ)

$ locate diff-highlight
$ cd /usr/share/doc/git/contrib/diff-highlight  #or path you locate
$ sudo make
$ mv diff-highlight ~/bin

จากนั้นกำหนดค่าของคุณ.gitconfigเป็นเอกสารอย่างเป็นทางการพูดว่า:

[pager]
    log  = diff-highlight | less
    show = diff-highlight | less
    diff = diff-highlight | less

UPD
นอกจากนี้คุณสามารถลองใหม่ล่าสุดgitโดยไม่ต้องติดตั้งใด ๆ :

git diff --color-words=.

ซับซ้อนยิ่งขึ้น:

git diff --color-words='[^[:space:]]|([[:alnum:]]|UTF_8_GUARD)+'

1

Emacs มีฟังก์ชัน ediff-patch-buffer ซึ่งควรตอบสนองความต้องการของคุณ

เปิดไฟล์ที่ไม่ได้แพตช์ใน emacs ประเภท ESC-x, ediff-patch-buffer

ทำตามคำแนะนำและคุณจะเห็นการเปรียบเทียบที่ไฮไลต์ของไฟล์เวอร์ชันที่ได้รับการแก้ไขและเวอร์ชันดั้งเดิมของคุณ

ตามความคิดเห็นของคุณต่อไปนี้จะให้วิธีแก้ปัญหาทุบตีที่ต้องใช้ dwdiff เท่านั้น:

#!/bin/bash
paste -d'\n' <(dwdiff -2 -L -c <(cat $2) <(patch $2 -i $1 -o -)) <(dwdiff -1 -L -c <(cat $2) <(patch $2 -i $1 -o -))| uniq

ขอโทษฉันไม่ต้องการใช้ emacs เฉพาะ bash, git หรือ vim
Nikolay Frantsev

นั่นเป็นเรื่องที่เข้าใจได้ สิ่งเดียวที่ฉันคิดได้คือการใช้ colordiff กับ stdout จาก patch: colordiff -u <(patch original_file -i patch_file -o -) <(cat original_file) แต่นี่เป็นเพียงการเน้นเส้นที่เปลี่ยนไปไม่ใช่การกัด ...
Finbar Crago

ฉันให้ปัญหาของคุณคิดมากขึ้นและได้ผนวกวิธีแก้ปัญหาที่สองซึ่งต้องการเพียง dwdiff
Finbar Crago

1
โปรดอ่านคำถามของฉันอย่างละเอียดฉันไม่ต้องการเปรียบเทียบไฟล์
Nikolay Frantsev

1
ขออภัยในความสับสนดังนั้นคุณเพียงแค่หลังจากที่จะเน้นไบต์ที่เปลี่ยนแปลงในบรรทัดที่เปลี่ยนแปลงของไฟล์ diff? ถ้าลองdwdiff -c --diff-input diff_file
Finbar Crago

1

ดิฟฟี่

GitLab ใช้ Diffy https://github.com/samg/diffy (Ruby) เพื่อให้ได้ผลลัพธ์ที่คล้ายกับ GitHub และ diff-highlight:

ป้อนคำอธิบายภาพที่นี่

Diffy สร้างความแตกต่างโดยใช้อัลกอริทึม ad Git เดียวกันและรองรับเอาต์พุตประเภทต่างๆรวมถึงเอาต์พุต HTML ที่ GitLab ใช้:

gem install diffy
echo '
  require "diffy"    
  puts Diffy::Diff.new("a b c\n", "a B c\n").to_s(:html)
' | ruby

เอาท์พุต:

<div class="diff">
  <ul>
    <li class="del"><del>a <strong>b</strong> c</del></li>
    <li class="ins"><ins>a <strong>B</strong> c</ins></li>
  </ul>
</div>

สังเกตว่าstrongถูกเพิ่มเข้าไปในไบต์ที่เปลี่ยนแปลงอย่างไร


0

ใช่ Vim ทำสิ่งนี้รวมถึงการเน้นข้อความที่เปลี่ยนไปภายในบรรทัด
ดู:h diffและ:h 08.7สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับวิธีการไฟล์ diff

กลุ่มใช้อัลกอริทึมที่ค่อนข้างง่ายสำหรับการไฮไลต์ มันค้นหาบรรทัดสำหรับอักขระที่เปลี่ยนแปลงตัวแรกจากนั้นอักขระที่เปลี่ยนแปลงล่าสุดและเพียงแค่เน้นอักขระทั้งหมดที่อยู่ระหว่างพวกเขา
ซึ่งหมายความว่าคุณไม่สามารถมีไฮไลต์หลายรายการต่อบรรทัด - การตัดสินใจออกแบบหลาย ๆ อย่างใน Vim จะให้ความสำคัญกับประสิทธิภาพ


น่าเสียดายที่มันไม่ได้เน้นไบต์ที่เปลี่ยนแปลงบนเอาต์พุตที่แตกต่างกัน (set filetype = diff)
Nikolay Frantsev

1
ฉันคิดว่าฉันเข้าใจคำถามของคุณแล้ว - คุณต้องการให้ไวยากรณ์เน้นผลลัพธ์ที่เป็นข้อความของคำสั่ง diff เพื่อให้ไฮไลต์การเปลี่ยนแปลงใด ๆ ที่เกิดขึ้นภายในบรรทัด การแก้ไขข้อความนี้ในกลุ่มจะเน้นความแตกต่างของเส้น แต่ไม่ใช่การเปลี่ยนแปลงที่เกิดขึ้นภายในบรรทัด
PDug

คุณสามารถใช้คำสั่ง Vim's: patchfile เพื่อโหลดไฟล์ต้นฉบับแล้วเปรียบเทียบกับเวอร์ชันที่แพตช์ได้หรือไม่
PDug

น่าเสียดายที่ฉันต้องการใช้เอาต์พุต diff แบบเรียกซ้ำสำหรับไฟล์หลายไฟล์
Nikolay Frantsev

0

vimdiff file1 file2 จะแสดงความแตกต่างของอักขระที่ชาญฉลาดระหว่างสองไฟล์

vimdiff เป็นเครื่องมือที่แตกต่างที่รวมอยู่ในกลุ่ม (ควรรวบรวมเป็นกลุ่มด้วยตัวเลือก + diff เพื่อให้แน่ใจว่าคุณสามารถตรวจสอบได้:version)

คุณยังสามารถเปิดใช้งานได้จากภายในกลุ่ม ดู:help diffข้อมูลและคำสั่งเพิ่มเติม


ฉันไม่ต้องการเปรียบเทียบไฟล์ฉันต้องการเน้นไฟล์ diff (patch)
Nikolay Frantsev

@Nikolay Frantsev หากคุณไม่สนใจเกี่ยวกับ perfomance คุณสามารถติดตั้งของฉันformat.vimvimdiff file.old file.new -c 'FormatCommand diffformat' -c 'w! file.diff.html' -c 'qa!'ปลั๊กอินและทำ
ZyX

มันจะสร้างความแตกต่างในโหมดแบทช์ ( screen -D -mเพิ่มหรือต่อท้าย&>/dev/null(ตัวแปร / dev / null บางครั้งสร้างข้อบกพร่องแปลก ๆ ) หากคุณไม่ต้องการเห็นเทอร์มินัลกระพริบ) และออกจากกลุ่มหลังจากฟอร์แมตเสร็จแล้ว แต่มันเป็น vimscript ที่บริสุทธิ์และ แม้ว่าการเพิ่มประสิทธิภาพของฉันจะช้ามากสำหรับไฟล์ขนาดใหญ่
ZyX

0

หมายเหตุ : สิ่งนี้ซ้ำกับสิ่งที่พบที่นี่: จะปรับปรุงการไฮไลต์ที่แตกต่างของ git ได้อย่างไร . โพสต์คำตอบของฉันไว้ที่นี่ด้วยเพราะอาจเป็นประโยชน์กับบางคนที่พบกระทู้นี้โดยตรง :)

ดังที่ได้กล่าวไว้ในคำตอบก่อนหน้านี้เป็นไปได้เฉพาะสิ่งที่คอมไพล์ ฉันโพสต์สิ่งนี้เนื่องจากคำแนะนำอาจทำตามได้ง่ายกว่าเล็กน้อยขึ้นอยู่กับระบบของคุณ แต่ก็คล้ายกับคำตอบอื่น ๆ

ทางออกเดียวที่อาศัยคอมไพล์และโครงสร้างของมันอย่างหมดจด นี้ไม่จำเป็นต้องแฟ้มเพิ่มเติมกว่าสิ่งที่มาพร้อมกับคอมไพล์ คำอธิบายทั้งหมดใช้สำหรับ Ubuntu (ทดสอบบน 18.04LTS) ควรทำงานในลักษณะเดียวกันกับระบบ linux อื่น ๆ :

  • ค้นหาข้อมูลโค้ด git ที่เน้นความแตกต่าง:
find -L /usr -name diff-highlight -type f

ในระบบของฉันคำตอบเดียวที่ถูกต้องคือ:

/usr/share/doc/git/contrib/diff-highlight/diff-highlight
  • ทำให้สคริปต์ perl ที่เกี่ยวข้องสามารถเรียกใช้งานได้ ในกรณีของฉันฉันต้องทำ:
sudo chmod +x /usr/share/doc/git/contrib/diff-highlight/diff-highlight
  • อัปเดตของคุณ~/.gitconfigเพื่อให้ได้ผลลัพธ์ที่คุณต้องการโดยเพิ่ม (โปรดทราบว่านี่คือ TABS ไม่ใช่ 4 ช่องว่าง):
[color "diff-highlight"]
    oldNormal = red
    oldHighlight = red 52
    newNormal = green
    newHighlight = green 22
  • สนุกกับผลลัพธ์ (หมายเหตุ: นี่เป็นเพียงการระบายสีที่แตกต่าง + ไฮไลต์ฉันมีสิ่งอื่น ๆ ที่เล่นที่นี่ด้วยสำหรับการแจ้งเตือนแน่นอน :))

diff-highligh

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