ทำให้เอาต์พุต diff อ่านได้ง่ายขึ้น


12

ฉันกำลังมองหาเครื่องมือที่จะใช้เอาต์พุต diff / debdiff ( และโดยเฉพาะอย่างยิ่งเอาต์พุตของสคริปต์นี้ ) และแสดงผลลัพธ์ของการเปรียบเทียบในแบบกราฟิกที่อ่านง่ายและสูง พอยน์เตอร์ใด ๆ ที่จะได้รับการชื่นชม

อุดมคติมันจะเป็น GTK + FOSS เทียบเท่าMDR

Meld, Diffuse และซอฟต์แวร์ที่คล้ายกันไม่เหมาะสำหรับจุดประสงค์นี้เนื่องจากพวกเขาตั้งใจจะทำงานแบบสแตนด์อโลนและไม่รับข้อมูลจาก stdin

คำตอบ:


8

Kompareสามารถทำสิ่งนี้ได้ (และเป็น IMO ที่ดีที่สุดสำหรับ GUI diff-viewer):

./whatchanged package_name | kompare -

หมายเหตุ '-' รับเป็นอาร์กิวเมนต์ไฟล์อินพุต โปรแกรม * nix ส่วนใหญ่มีอินเทอร์เฟซนี้เพื่อรับอินพุตแบบ pip ดังนั้นคุณอาจจะใช้แบบไหนก็ได้ที่คุณชอบ


ใช่ฉันลองใช้กับ Meld แต่สิ่งที่เกิดขึ้นคือ Meld เปิดตัวทันทีและรับเอาท์พุทระดับกลางของสคริปต์แทนที่จะเปิดตัวเมื่อสคริปต์เสร็จสิ้นและรับเอาต์พุต diff ฉันอาจต้องปรับโฟลว์ของสคริปต์เพื่อให้ทำงานอย่างถูกต้องกับ Meld และซอฟต์แวร์อื่น ๆ และด้วย "bzr diff" และเอาต์พุต diff ปกติ Meld จะถูกเรียกใช้ในโหมด VCS แทนโหมดเปรียบเทียบไฟล์
mgunes

ฉันแก้ไขปัญหาโหมด VCS โดยเปิดตัว Meld ด้วยตัวเลือก -a Kompare ก็ใช้ได้เช่นกัน สิ่งที่เหลืออยู่ก็คือการทำให้สคริปต์รับทราบ
mgunes

3

หากคุณมีเพียงคอนโซลcolordiffเป็นทางออกที่ดีมาก

หากต้องการติดตั้งให้รันคำสั่งนี้sudo apt-get install colordiffในเทอร์มินัล


2

ฉันชอบใช้ไวยากรณ์ภายในของvim ที่เน้นเป็นเพจเจอร์เพื่อให้ฉันสามารถดู diffs colorized ตัวอย่างเช่นวางสิ่งนี้ลงใน.bashrc:

sudo apt-get install vim
alias vless='vim -u /usr/share/vim/vimcurrent/macros/less.vim'

(แล้วกลับมาของคุณ.bashrcด้วย. ~/.bashrc.) จากนั้นคุณสามารถเรียกใช้vlessเป็นเพจเจอร์ของคุณ:

vless /path/to/your.diff

มันไม่ใช่กราฟิก แต่อย่างน้อยก็เน้น


แต่เขาไม่ได้ขอไฟล์ diff สีเขาถาม diffs แบบกราฟิก คำแนะนำใดที่คุณต้องสามารถอ่านไฟล์ต้นฉบับได้มากเท่าที่ต่างกัน
Martin Owens -doctormo-

ดี "อ่านจาก stdin" เป็นข้อกำหนด หาก "Meld" ถูกตัดออกไปแล้วจะไม่มีอะไรเหลืออีกมาก คำตอบอื่น ๆ ที่สร้าง diff และเปิด Meld เป็นทางออกที่ดีที่สุดสำหรับกราฟิก หรือจะเปิดgeditตัวแทน
Kees Cook

คุณไม่ได้ใส่ "sudo apt-get install vim" ใน. bashrc ของคุณโปรดแก้ไขเพื่อให้ชัดเจน
Capi Etheriel

2

แม้ว่าแอปพลิเคชัน KDE จะสามารถติดตั้งได้โดยไม่ต้องพึ่งพาอะไรมากมาย kdiff เป็นเครื่องมือแก้ไข / รวมที่น่าสนใจ


1
ในขณะที่ kdiff (aka kdiff3 ใน ubuntu archive) เป็นเครื่องมือที่ยอดเยี่ยม แต่ก็ไม่ได้ตอบคำถามของ OP เนื่องจากพวกเขากำลังมองหาเครื่องมือที่จะใช้ diff บน STDIN และแสดงผลและจากการสำรวจที่ จำกัด ที่ฉันทำ ฉันไม่เห็นวิธีที่จะทำเช่นนั้น นอกจากนี้หากลดการพึ่งพา KDE เป็นปัญหาไฟล์เก็บถาวร ubuntu จะรวม kdiff3-qt ซึ่งขึ้นอยู่กับ qt และไม่ใช่ไลบรารีจากสแต็ก KDE
Steve Beattie

2

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

#!/bin/bash

TMPDIR=`mktemp -d`
DIFF_FILE=`mktemp`
TARGET='./'

cat /proc/$$/fd/0 > $DIFF_FILE
cd $TARGET
rsync -apvz --delete --stats --compress --progress $TARGET $TMPDIR
patch -R -p0 -d $TMPDIR < $DIFF_FILE
meld $TARGET $TMPDIR

ทดสอบด้วย meld และเอาต์พุตจาก bzr diff ดังนั้นคัดลอกสิ่งนี้ลงใน / usr / bin และ chmod 755 และฉันก็ทำสิ่งนี้:

bzr diff | meld-diff

ผลลัพธ์แสดงตามที่คาดไว้


4
แม้ว่ามันจะไม่เป็นปัญหามากนักสำหรับผู้ใช้คนเดียว แต่คุณควรใช้mktempและmktemp -dสร้างไฟล์ชั่วคราวและไดเร็กตอรี่ชั่วคราวอย่างปลอดภัยหากไม่มีเหตุผลอื่นนอกจากเพื่อให้คุณสามารถทำงานต่าง ๆ บนต้นไม้หลายต้นได้ในเวลาเดียวกัน อื่น ๆ.
Steve Beattie

มันทำงานร่วมกับ bzr diff ได้ แต่จะอยู่ในโหมดการเปรียบเทียบไดเรกทอรีเท่านั้น ฉันต้องการที่จะสามารถเปรียบเทียบไฟล์แต่ละไฟล์ได้เช่นกัน ฉันจะพยายามปรับแต่งให้ใช้งานได้จริงกับสคริปต์ของฉันเช่นกันซึ่งตอนนี้ไม่ได้ ขอบคุณ
mgunes

ทำเครื่องหมายให้ฉันถ้าคุณคิดว่าการใช้สคริปต์ของฉันนั้นดี จนถึงตอนนี้ฉันถูกทำเครื่องหมายมากเกินไป
Martin Owens -doctormo-

1

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

  • สำหรับกรณีemacsคุณจะใช้โหมด Ediff (โดยค่าเริ่มต้น) ดูหน้าวิกินี้หรือปรึกษาคู่มืออย่างเป็นทางการ

  • ใช้ emacs เป็นเรื่องง่ายเพียงแค่พิมพ์และประเภทAlt + xediff

  • คุณสามารถใช้ ediff เพื่อความแตกต่างของเบราว์เซอร์ระหว่างสาขาและการแก้ไขที่เก็บของคุณ (bzr, git, svn, ฯลฯ )


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