ฉันจะได้รับความแตกต่างแบบเคียงข้างกันเมื่อฉันทำ“ คอมไพล์ diff” ได้อย่างไร


163

เมื่อฉันพิมพ์ "git diff" ฉันต้องการเห็น diff แบบเคียงข้างกันเช่น "diff -y" หรือต้องการแสดง diff ในเครื่องมือ diff แบบโต้ตอบเช่น "kdiff3" สิ่งนี้สามารถทำได้?




คำตอบ:


89

แม้ว่า Git จะมีการนำไปใช้ภายใน diff แต่คุณสามารถตั้งค่าเครื่องมือภายนอกแทน

มีสองวิธีที่แตกต่างกันในการระบุเครื่องมือ diff ภายนอก:

  1. การตั้งค่าGIT_EXTERNAL_DIFFและGIT_DIFF_OPTSตัวแปรสภาพแวดล้อม
  2. การกำหนดค่าเครื่องมือ diff ภายนอกผ่าน git config

ดูสิ่งนี้ด้วย:

เมื่อทำ a git diff, Git จะตรวจสอบทั้งการตั้งค่าตัวแปรสภาพแวดล้อมข้างต้นและ.gitconfigไฟล์

โดยค่าเริ่มต้น Git ส่งผ่านเจ็ดอาร์กิวเมนต์ต่อไปนี้ไปยังโปรแกรม diff:

path  old-file  old-hex old-mode  new-file  new-hex new-mode

โดยทั่วไปคุณต้องการเพียงพารามิเตอร์ไฟล์เก่าและไฟล์ใหม่ แน่นอนที่สุดเครื่องมือต่าง ๆ ใช้ชื่อไฟล์สองชื่อเป็นอาร์กิวเมนต์เท่านั้น ซึ่งหมายความว่าคุณต้องเขียน wrapper-script ขนาดเล็กซึ่งใช้อาร์กิวเมนต์ที่ Git จัดให้กับสคริปต์และส่งต่อไปยังโปรแกรม git ภายนอกที่คุณเลือก

สมมติว่าคุณวางเสื้อคลุมสคริปต์ไว้ใต้~/scripts/my_diff.sh:

#!/bin/bash
# un-comment one diff tool you'd like to use

# side-by-side diff with custom options:
# /usr/bin/sdiff -w200 -l "$2" "$5" 

# using kdiff3 as the side-by-side diff:
# /usr/bin/kdiff3 "$2" "$5"

# using Meld 
/usr/bin/meld "$2" "$5"

# using VIM
# /usr/bin/vim -d "$2" "$5"

จากนั้นคุณต้องทำให้สคริปต์นั้นทำงานได้:

chmod a+x ~/scripts/my_diff.sh

จากนั้นคุณต้องบอก Git อย่างไรและจะหาสคริปต์ wrapper diff ของคุณได้อย่างไร คุณมีสามทางเลือกว่าจะทำอย่างไร: (ฉันชอบแก้ไขไฟล์. gitconfig)

  1. การใช้ GIT_EXTERNAL_DIFF ,GIT_DIFF_OPTS

    เช่นในไฟล์. bashrc หรือ. bash_profile ของคุณคุณสามารถตั้งค่า:

    GIT_EXTERNAL_DIFF=$HOME/scripts/my_diff.sh
    export GIT_EXTERNAL_DIFF
    
  2. การใช้ git config

    ใช้ "git config" เพื่อกำหนดตำแหน่งที่สามารถพบสคริปต์ตัวตัดคำของคุณ:

    git config --global diff.external ~/scripts/my_diff.sh
    
  3. การแก้ไขของคุณ ~/.gitconfigไฟล์

    คุณสามารถแก้ไข~/.gitconfigไฟล์ของคุณเพื่อเพิ่มบรรทัดเหล่านี้:

    [diff]
      external = ~/scripts/my_diff.sh
    

บันทึก:

เช่นเดียวกับการติดตั้งเครื่องมือ diff แบบกำหนดเองของคุณคุณยังสามารถติดตั้งเครื่องมือผสานแบบกำหนดเองซึ่งอาจเป็นเครื่องมือการผสานภาพเพื่อช่วยให้มองเห็นการผสานได้ดียิ่งขึ้น (ดูที่หน้า progit.org)

ดู: http://fredpalma.com/518/visual-diff-and-merge-tool/และhttps://git-scm.com/book/en/v2/Customizing-Git-Git-Configuration


1
สิ่งนี้จะคงสีขั้วของคอมไพล์หรือไม่?
Sridhar Sarnobat

3
สิ่งนี้ยอดเยี่ยม แต่มันเปิดตัวมุมมองใหม่สำหรับทุกไฟล์ มีวิธีใดในการสร้างความแตกต่างที่รวมกันพูดmeld?
HRJ

2
@Tilo ฉันได้รับข้อผิดพลาดเป็นกลุ่มเป็น im: คำเตือน: การส่งออกไม่ได้ไปยังสถานี
โปรแกรมเมอร์ที่ตายแล้ว

สามารถmeldรุ่นที่มีการกำหนดค่าที่จะทำ diff ไดเรกทอรีที่ฉันสามารถเลือกไฟล์ (s) ผมอยากจะเห็นความแตกต่างสำหรับ? ขณะนี้มันรันmeldคำสั่งแยกต่างหากสำหรับแต่ละไฟล์และฉันต้องออกmeldเพื่อที่จะดูไฟล์ต่อไป ฉันควรmeldแสดงรายการไดเรกทอรีของไฟล์ที่ถูกเปลี่ยนแปลงเหมือนที่มันทำงานเมื่อmeldใช้จาก Mercurial
kasperd

163

ลองคอมไพล์โฟลว์

ใช้git difftoolแทนgit diffแทนคุณจะไม่ย้อนกลับไป

อัปเดตเพื่อเพิ่มการใช้งานตัวอย่าง:

นี่คือลิงก์ไปยังสแต็คโอเวอร์โฟลว์อื่นที่พูดถึงgit difftool: ฉันจะดูผลลัพธ์ 'git diff' ด้วยเครื่องมือ / โปรแกรมดูไฟล์ diff ของฉันได้อย่างไร

สำหรับรุ่นใหม่ของgitการdifftoolสั่งสนับสนุนเครื่องมือ diff ภายนอกมากออกจากกล่อง ตัวอย่างเช่นvimdiffรองรับอัตโนมัติและสามารถเปิดได้จากบรรทัดคำสั่งโดย:

cd /path/to/git/repo
git difftool --tool=vimdiff

เครื่องมือ diff ภายนอกอื่น ๆ ที่รองรับแสดงไว้git difftool --tool-helpที่นี่เป็นตัวอย่างผลลัพธ์:

'git difftool --tool=<tool>' may be set to one of the following:
        araxis
        kompare
        vimdiff
        vimdiff2

The following tools are valid, but not currently available:
        bc3
        codecompare
        deltawalker
        diffuse
        ecmerge
        emerge
        gvimdiff
        gvimdiff2
        kdiff3
        meld
        opendiff
        tkdiff
        xxdiff

34
This message is displayed because 'diff.tool' is not configured.หรือบางทีคุณอาจจะกลับไปถ้าคุณได้รับ อาจอัพเดตคำตอบด้วยวิธีการตั้งค่าสิ่งนี้น้อยที่สุดเพื่อให้มันแสดงผลแบบเคียงข้างกันในเทอร์มินัลซึ่งเป็นสิ่งที่ OP ขอหรือไม่ เครื่องมือ GUI ค่อนข้างไร้ประโยชน์บนเซิร์ฟเวอร์ระยะไกลที่คุณเชื่อมต่อโดยใช้ ssh
Petr

1
จุดที่น่าสนใจแม้ว่าฉันไม่คิดว่าฉันจะต้องใช้คอมไพล์ส่วนตัวในขณะที่ SSH หนึ่งในสิ่งที่ดีเกี่ยวกับ DVCS คือส่วนที่แจกจ่าย: อย่างน้อยในสภาพแวดล้อมของฉันมันไม่ยุ่งยากที่จะลอกแบบในพื้นที่ไม่ว่า repo ที่ฉันต้องการจะแหย่
Matt Ball

1
อย่างน้อยใน config ของฉันgit difftoolโดยที่vimdiffไม่ได้เรียงไฟล์ / บัฟเฟอร์ทั้งสองให้ถูกต้องเสมอไป
Rohmer

1
ดีครับและเพื่อให้ลงมาด้านล่างในรายการคำตอบ: ใช้ OI git difftool -yเพื่อป้องกันไม่ให้ tkdiff พรอมต์
harshvchawla

ที่เกี่ยวข้อง: หลอมรวมของคุณgit difftoolใน Windows & Linux: stackoverflow.com/a/48979939/4561887
Gabriel Staples

55

git diff --word-diffนอกจากนี้คุณยังสามารถลอง มันไม่ได้อยู่เคียงข้างกัน แต่อย่างใดดีกว่าดังนั้นคุณอาจต้องการความต้องการที่แท้จริงของคุณแบบเคียงข้างกัน


12
นี่เป็นวิธีที่ง่ายที่สุด จะมีอะไรดีไปกว่านี้อีกแล้วgit diff --word-diff=color
Rolf

@Rolf --word-diff=colorทำให้ฉันมีข้อผิดพลาดตัวเลือกที่ไม่ถูกต้อง เวอร์ชั่นไหนที่เปิดตัว?
Holloway

@Trengot ฉันใช้คอมไพล์ 1.7.9 จาก 02/2012
Rolf

4
@Rolf เวอร์ชันเริ่มต้นที่ติดตั้งที่นี่คือ 1.7.1 สามารถอธิบายความแตกต่าง git diff --color-wordsทำงานได้ดี
Holloway

4
ใช่git diff --color-wordsเป็นวิธีที่จะไปรุ่น git ที่ทันสมัย
VasiliNovikov

41

ydiff

เมื่อก่อนเรียกว่าcdiffเครื่องมือนี้สามารถแสดงแบบเคียงข้างกันเพิ่มขึ้นและมีสีสันที่แตกต่าง

แทนที่จะทำgit diffทำ:

ydiff -s -w0

นี้จะเปิดตัว ydiffในโหมดการแสดงผลแบบเคียงข้างกันสำหรับแต่ละไฟล์ที่มีความแตกต่าง

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

python3 -m pip install --user ydiff

-หรือ-

brew install ydiff

สำหรับgit logคุณสามารถใช้:

ydiff -ls -w0

-w0ตรวจจับความกว้างเทอร์มินัลของคุณโดยอัตโนมัติ ดูydiff หน้าพื้นที่เก็บข้อมูล GitHubสำหรับรายละเอียดและการสาธิต

ทดสอบใน Git 2.18.0, ydiff 1.1


@RyneEverett: คุณสามารถอธิบายวิธีการเทียบเท่าgit diff | cdiff -sกับ icdiff ได้หรือไม่?
einpoklum

เพียงเรียกใช้ydiff -sจากพื้นที่ทำงาน git / svn / hg คุณไม่ต้องไปป์
ymattw

ถ้าคุณต้องการ จำกัด diff ไปยังไฟล์เฉพาะผ่านประวัติของ Git cd <git repo>แล้วเรียกใช้ydiff -ls <path/to/file>
slm

22

คุณสามารถทำแบบเคียงข้างกันโดยdiffใช้sdiffดังนี้:

$ git difftool -y -x sdiff  HEAD^ | less

ที่ไหน HEAD^เป็นตัวอย่างที่คุณควรเปลี่ยนกับสิ่งที่คุณต้องการที่จะต่อต้าน diff

ฉันพบวิธีแก้ปัญหานี้ที่นี่ซึ่งมีข้อเสนอแนะอื่น ๆ อีกสองสามรายการด้วย อย่างไรก็ตามคำตอบเดียวนี้เป็นคำถามของ OP อย่างกระชับและชัดเจน

ดูman git-difftoolเพื่อดูคำอธิบายของข้อโต้แย้ง


การแสดงความคิดเห็นบนกระดานคุณสามารถสร้างgit sdiffคำสั่งที่มีประโยชน์ได้โดยการเขียนสคริปต์ที่สามารถเรียกใช้งานได้ดังต่อไปนี้:

#!/bin/sh
git difftool -y -x "sdiff -w $(tput cols)" "${@}" | less

บันทึกเป็น/usr/bin/git-sdiffและchmod -xมัน จากนั้นคุณจะสามารถทำสิ่งนี้:

$ git sdiff HEAD^

ฉันมักจะทำ "$ git difftool -x 'sdiff -s -w 240'" (หรือความกว้างของหน้าจอ) ถ้า / เมื่อฉันต้องการที่จะระงับบรรทัดเดียวกันและมีเพียงไฟล์เดียว (มิฉะนั้นฉันจะ vimdiff)
HidekiAI

1
@HidekiAI ฉันคิดว่ามันเจ็บปวดที่จะพิมพ์ขั้วกว้างทุกครั้งดังนั้นผมใช้แทนตัวอย่างเช่น:tput cols git difftool -x "sdiff -s -w $(tput cols)"
Jaume

จะเน้นการเปลี่ยนแปลงสีได้หรือไม่ ตอนนี้ดูเหมือนว่าเราจะต้องใช้สายตาของเราที่จะเห็นสิ่งที่มีการเปลี่ยนแปลงจริง
nonopolarity

แทนที่ sdiff ด้วย icdiff เพื่อให้ได้หน้าจอสีที่สวยงาม
เกร็ก

10
export GIT_EXTERNAL_DIFF='meld $2 $5; echo >/dev/null'

แล้วก็:

git diff

1
`รวมกัน ' ทำงานเกินไป! และแสดงการเปลี่ยนแปลงทั้งหมดในหน้าต่างรวม
HRJ

@HRJ ที่ทำงานได้อย่างสมบูรณ์แบบ! เรียบง่ายและใช้งานได้จริง :)
waldyrious

9

หากคุณต้องการเห็นความแตกต่างแบบเคียงข้างกันในเบราว์เซอร์โดยไม่เกี่ยวข้องกับ GitHub คุณอาจสนุกกับgit webdiffซึ่งเป็นสิ่งทดแทนสำหรับgit diff:

$ pip install webdiff
$ git webdiff

สิ่งนี้มีข้อได้เปรียบเหนือกว่า GUI ที่แตกต่างกันหลายอย่างเช่น tkdiffซึ่งช่วยให้คุณสามารถเน้นไวยากรณ์และแสดงภาพที่แตกต่างได้

อ่านข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้ที่นี่


7

ฉันใช้colordiff

บน Mac OS X ให้ติดตั้งด้วย

$ sudo port install colordiff

บน Linux อาจเป็นไปได้apt get install colordiffหรืออะไรทำนองนั้นขึ้นอยู่กับ distro ของคุณ

แล้ว:

$ git difftool --extcmd="colordiff -ydw" HEAD^ HEAD

หรือสร้างนามแฝง

$ git alias diffy "difftool --extcmd=\"colordiff -ydw\""

จากนั้นคุณสามารถใช้มัน

$ git diffy HEAD^ HEAD

ฉันเรียกมันว่า "diffy" เพราะdiff -ydiff-by-side เป็นยูนิกซ์ Colordiff ยังเพิ่มสีสันนั่นก็ดีกว่า ในตัวเลือก-ydwที่yเป็นด้านข้างที่wเป็นช่องว่างที่จะไม่สนใจและdเป็นในการผลิตต่างน้อยที่สุด (โดยปกติคุณจะได้รับผลที่ดีกว่าเป็น diff)


เพิ่ม-yเพื่อข้ามLaunch 'colordiff' [Y/n]:พรอมต์
Beni Cherniavsky-Paskin

คุณแน่ใจgit alias diffy "difftool --extcmd=\"colordiff -ydw\""เหรอ ไม่ควรgit config --global alias.diffy "difftool --extcmd=\"colordiff -ydw\""หรือ
nonopolarity

6

สำหรับ unix การรวม just gitและ built-in diff:

git show HEAD:path/to/file | diff -y - path/to/file

แน่นอนคุณสามารถแทนที่ HEAD ด้วยการอ้างอิง git อื่น ๆ และคุณอาจต้องการเพิ่มบางอย่างเช่น-W 170คำสั่ง diff

สมมติว่าคุณเพิ่งเปรียบเทียบเนื้อหาไดเรกทอรีของคุณกับการกระทำที่ผ่านมา การเปรียบเทียบระหว่างสองคอมมิทนั้นซับซ้อนมากขึ้น หากเชลล์ของคุณคือbashคุณสามารถใช้ "การทดแทนกระบวนการ":

diff -y -W 170 <(git show REF1:path/to/file) <(git show REF2:path/to/file)

ที่ไหนREF1และREF2มีการอ้างอิง Git - แท็กสาขาหรือแฮช


ขอบคุณ - คำสั่งของคุณ 'git show HEAD: path / to / file' เป็นสิ่งที่ฉันต้องการเพื่อแก้ปัญหาของตัวเอง 'vimdfiff <(git show HEAD: path / to / file) path / to / file' บิตยังคงเรียงไม่ถูกต้อง แต่นั่นเป็นทางออกที่ดีที่สุดที่ฉันมีตอนนี้
talexb

5

โดยส่วนตัวแล้วฉันชอบicdiff !

หากคุณอยู่ในMac OS Xที่มีเพียงแค่ทำHomeBrewbrew install icdiff

เพื่อให้ได้เลเบลไฟล์อย่างถูกต้องรวมทั้งฟีเจอร์เด็ด ๆ อื่น ๆ ฉันมีใน~/.gitconfig:

[pager]
    difftool = true
[diff]
    tool = icdiff
[difftool "icdiff"]
    cmd = icdiff --head=5000 --highlight --line-numbers -L \"$BASE\" -L \"$REMOTE\" \"$LOCAL\" \"$REMOTE\"

และฉันใช้มันเหมือน: git difftool


3

คำถามนี้ปรากฏขึ้นเมื่อฉันค้นหาวิธีที่รวดเร็วในการใช้วิธี git builtin เพื่อค้นหาความแตกต่าง เกณฑ์การแก้ปัญหาของฉัน:

  • เริ่มต้นอย่างรวดเร็วจำเป็นต้องมีตัวเลือกในตัว
  • สามารถจัดการรูปแบบต่าง ๆ ได้อย่างง่ายดาย, xml, ภาษาการเขียนโปรแกรมที่แตกต่างกัน
  • ระบุการเปลี่ยนแปลงรหัสขนาดเล็กอย่างรวดเร็วในไฟล์ข้อความขนาดใหญ่

ฉันพบคำตอบนี้เพื่อให้ได้สีในคอมไพล์

เพื่อให้ได้ต่างกันแทน diff diff ฉัน tweaked mb14ของคำตอบที่ดีกับคำถามนี้ด้วยพารามิเตอร์ต่อไปนี้:

$ git diff --word-diff-regex="[A-Za-z0-9. ]|[^[:space:]]"

หากคุณไม่ชอบ [- หรือ {+ พิเศษ--word-diff=colorสามารถใช้ตัวเลือกได้

$ git diff --word-diff-regex="[A-Za-z0-9. ]|[^[:space:]]" --word-diff=color

ที่ช่วยในการเปรียบเทียบที่เหมาะสมกับทั้งข้อความ json และ xml และรหัสจาวา

โดยสรุป--word-diff-regexตัวเลือกมีการมองเห็นที่เป็นประโยชน์ร่วมกับการตั้งค่าสีเพื่อให้ได้รับซอร์สโค้ดแบบเคียงข้างกันเมื่อเปรียบเทียบกับบรรทัดมาตรฐานที่ต่างกันเมื่อเรียกดูไฟล์ขนาดใหญ่ที่มีการเปลี่ยนแปลงบรรทัดเล็ก ๆ


3

อีกหลายคนพูดถึงcdiffสำหรับคอมไพล์แบบเคียงข้างกัน แต่ไม่มีใครให้การใช้งานเต็มที่

ตั้งค่า cdiff:

git clone https://github.com/ymattw/cdiff.git
cd cdiff
ln -s `pwd`/cdiff ~/bin/cdiff
hash -r # refresh your PATH executable in bash (or 'rehash' if you use tcsh)
        # or just create a new terminal

แก้ไข ~ / .gitconfig แทรกบรรทัดเหล่านี้:

[pager]
        diff = false
        show = false

[diff]
        tool = cdiff
        external = "cdiff -s $2 $5 #"

[difftool "cdiff"]
        cmd = cdiff -s \"$LOCAL\" \"$REMOTE\"

[alias]
        showw = show --ext-dif

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

จำเป็นต้องใช้นามแฝงการแสดงเนื่องจาก git show สนับสนุนเครื่องมือ diff ภายนอกผ่านการโต้แย้งเท่านั้น

'#' ในตอนท้ายของคำสั่ง diff ภายนอกเป็นสิ่งสำคัญ คำสั่ง diff ของ Git จะเพิ่ม $ @ (ตัวแปร diff ที่มีอยู่ทั้งหมด) ให้กับคำสั่ง diff แต่เราต้องการแค่สองชื่อไฟล์เท่านั้น ดังนั้นเราจึงเรียกสองสิ่งนี้อย่างชัดเจนด้วย $ 2 และ $ 5 จากนั้นซ่อน $ @ ไว้หลังความคิดเห็นซึ่งอาจสร้างความสับสนให้กับ sdiff ทำให้เกิดข้อผิดพลาดที่ดูเหมือนว่า:

fatal: <FILENAME>: no such path in the working tree
Use 'git <command> -- <path>...' to specify paths that do not exist locally.

คำสั่ง Git ที่ทำให้เกิดความแตกต่างแบบเคียงข้างกัน:

git diff <SHA1> <SHA2> 
git difftool <SHA1> <SHA2>
git showw <SHA>

การใช้ Cdiff:

'SPACEBAR' - Advances the page of the current file.
'Q'        - Quits current file, thus advancing you to the next file.

ตอนนี้คุณมี diff ต่างกันผ่าน git diff และ difftool และคุณมีซอร์สโค้ด cdiff สำหรับการปรับแต่งผู้ใช้ระดับสูงหากคุณต้องการ


2

นี่คือวิธีการ หากคุณผ่านน้อยกว่าความกว้าง xterm ถูกตั้งค่าเป็น 80 ซึ่งไม่ร้อนมาก แต่ถ้าคุณดำเนินการคำสั่งด้วยเช่น COLS = 210 คุณสามารถใช้ xterm ที่ขยายของคุณได้

gitdiff()
{
    local width=${COLS:-$(tput cols)}
    GIT_EXTERNAL_DIFF="diff -yW$width \$2 \$5; echo >/dev/null" git diff "$@"
}

1
ตลก. ฉันเซ็นชื่อด้วยนามแฝง แต่ไม่สนใจ ... ขอบคุณสำหรับการออกนอกบ้าน Stack Overflow :(
Thomas Mellman

2

เปิดIntellij IDEAเลือกการกระทำเดียวหรือหลายรายการในหน้าต่างเครื่องมือ "การควบคุมเวอร์ชัน" เรียกดูไฟล์ที่เปลี่ยนแปลงแล้วคลิกสองครั้งเพื่อตรวจสอบการเปลี่ยนแปลงแบบเคียงข้างกันสำหรับแต่ละไฟล์

ด้วยตัวเรียกใช้งานบรรทัดคำสั่งที่ให้มาคุณสามารถนำ IDEA ขึ้นมาได้ทุกที่ด้วยวิธีง่ายๆ idea some/path

มุมมองการควบคุมเวอร์ชัน มุมมองต่าง


1

มีคำตอบที่ดีมากมายในกระทู้นี้ ทางออกของฉันสำหรับปัญหานี้คือการเขียนสคริปต์

ตั้งชื่อนี้ว่า 'git-scriptname' (และทำให้มันใช้งานได้และนำไปไว้ใน PATH ของคุณเช่นสคริปต์ใด ๆ ) และคุณสามารถเรียกใช้มันเหมือนคำสั่ง git ปกติโดยการเรียกใช้

$ git scriptname

ฟังก์ชันการทำงานจริงเป็นเพียงบรรทัดสุดท้าย นี่คือแหล่งที่มา:

#!/usr/bin/env zsh
#
#   Show a side-by-side diff of a particular file how it currently exists between:
#       * the file system
#       * in HEAD (latest committed changes)

function usage() {
    cat <<-HERE
    USAGE

    $(basename $1) <file>

    Show a side-by-side diff of a particular file between the current versions:

        * on the file system (latest edited changes)
        * in HEAD (latest committed changes)

HERE
}

if [[ $# = 0 ]]; then
    usage $0
    exit
fi

file=$1
diff -y =(git show HEAD:$file) $file | pygmentize -g | less -R

1

นี่อาจเป็นวิธีที่ค่อนข้าง จำกัด แต่ทำงานโดยใช้diffคำสั่งของระบบโดยไม่มีเครื่องมือภายนอก:

diff -y  <(git show from-rev:the/file/path) <(git show to-rev:the/file/path)
  • กรองเฉพาะบรรทัดการเปลี่ยนแปลงที่ใช้--suppress-common-lines(หากคุณdiffสนับสนุนตัวเลือก)
  • ไม่มีสีในกรณีนี้เพียงแค่diffเครื่องหมายปกติ
  • สามารถปรับแต่งความกว้างของคอลัมน์--width=term-width; ในทุบตีจะได้รับความกว้างเป็นหรือ$COLUMNStput cols

สิ่งนี้สามารถรวมอยู่ใน git-script ของผู้ช่วยเหลือได้เช่นกันเพื่อความสะดวกยิ่งขึ้นตัวอย่างเช่นการใช้งานเช่นนี้:

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