คำถามติดแท็ก diff

diff - เครื่องมือบรรทัดคำสั่งเพื่อแสดงความแตกต่างระหว่างสองไฟล์หรือแต่ละไฟล์ที่เกี่ยวข้องในสองไดเรกทอรี

4
ผลลัพธ์ของ diff สองไฟล์ที่มีสวิตช์สลับบอกว่าไม่มีบรรทัดเดียวกันสองครั้ง
ฉันพยายามที่จะเข้าใจคำสั่ง linux diff ในสองไฟล์ที่บรรทัดมีการเรียงสับเปลี่ยนกัน แต่ไม่สามารถติดตามผลลัพธ์ที่สร้างขึ้นได้ พิจารณาสามคำสั่งด้านล่าง: [myPrompt]$ cat file1 apples oranges [myPrompt]$ cat file2 oranges apples [myPrompt]$ diff file1 file2 1d0 < apples 2a2 > apples บางคนสามารถอธิบายเอาต์พุตที่เป็นความลับดังกล่าวจาก diff ทำไมไม่มีการกล่าวถึง "ส้ม" เลยในเอาต์พุต อะไร1d0และ2a2หมายความว่าอย่างไร ฉันเข้าใจ จากคำตอบนี้ว่า: "<" หมายถึงบรรทัดนั้นหายไปใน file2 และ ">" หมายถึงบรรทัดนั้นขาดหายไปใน file1 แต่นั่นไม่ได้อธิบายว่าทำไมส้มจึงหายไปในผลลัพธ์
28 diff 

1
diff - หมายเลขบรรทัดเอาต์พุต
ฉันต้องการใช้เครื่องมือ cli สำหรับการเปรียบเทียบไฟล์และต้องการหมายเลขบรรทัดก่อนเอาท์พุทบรรทัดที่ช่วยให้ฉันสามารถข้ามไปยังความแตกต่างของบรรทัดได้เนื่องจากฉันใช้เครื่องมือที่เข้าใจตำแหน่งที่จะกระโดดหากบรรทัดเริ่มต้นเช่นนี้ :line-number: regular line contents ดังนั้นฉันจึงลองdiffอ่านเอกสารและดูเหมือนว่าอาจเป็นไปได้: -D, --ifdef=NAME output merged file with `#ifdef NAME' diffs --GTYPE-group-format=GFMT format GTYPE input groups with GFMT --line-format=LFMT format all input lines with LFMT --LTYPE-line-format=LFMT format LTYPE input lines with LFMT These format options provide fine-grained control over the output of diff, generalizing …
25 diff 

1
ตัวเลือก“ -d” มีผลกระทบอะไรกับ diff
การdiffใช้งานบน OpenBSD มี-dตัวเลือกที่ไม่ได้มาตรฐานพร้อมเอกสารดังต่อไปนี้: -d พยายามอย่างหนักในการสร้างส่วนต่างให้เล็กที่สุด สิ่งนี้อาจใช้กำลังการประมวลผลและหน่วยความจำจำนวนมากเมื่อประมวลผลไฟล์ขนาดใหญ่ที่มีการเปลี่ยนแปลงมากมาย diffการนำGNU ไปใช้นั้นมีตัวเลือกเดียวกันกับเอกสารที่สั้นกว่า -d, --minimal พยายามอย่างหนักเพื่อหาชุดการเปลี่ยนแปลงที่มีขนาดเล็กลง บางครั้งฉันใช้ตัวเลือกนี้เพื่อดูว่ามันสร้างเอาต์พุตที่มีรูปร่างหรือรูปแบบที่แตกต่างจากdiffคำสั่งเดียวกันโดยไม่มีตัวเลือกหรือไม่ แต่ฉันไม่เคยเห็นความแตกต่างเลย มีคนให้หรือชี้ไปที่ตัวอย่างที่ตัวเลือกนี้จริงสร้างผลลัพธ์ที่แตกต่างจากคำสั่งเดียวกันโดยไม่-d? อีกวิธีหนึ่งหากใครบางคนสามารถอธิบายสถานการณ์ที่จำเป็นสำหรับตัวเลือกนี้ที่จะเตะฉันยังไม่แน่ใจว่า "น้อยที่สุด" หมายถึง "สายการส่งออกน้อยลง" หรือ "นักล่าน้อยลง" การเดาที่ไร้การศึกษาก็คือมันเกี่ยวข้องกับการล่าสัตว์ที่มีขนาดใหญ่มาก
24 diff 

3
แตกต่างแสดงบรรทัดที่แก้ไขจากไฟล์ที่ถูกต้องเท่านั้น
ฉันมีไฟล์aและbและผมอยากจะสายออกของที่มีการเปลี่ยนแปลงตั้งแต่มันถูกโคลนจากb aเพียงแค่บรรทัดที่แก้ไขไม่มีบริบทโดยรอบไม่มีเครื่องหมายตรงข้ามที่ต่างกัน ฉันจะทำสิ่งนั้นโดยใช้เชลล์สคริปต์ได้อย่างไร (ไม่มี Python / Perl / PHP / ... ) Sed และ awk เป็นคำตอบที่ยอมรับได้ สำหรับตอนนี้สิ่งที่ฉันกำลังทำคือ diff -y กับ - suppress-common-lines และ sed โดยใช้การอ้างอิงย้อนกลับของ regex เพื่อดึงส่วนที่ถูกต้องหลังจากช่องว่าง จะต้องมีวิธีที่ดีกว่า ใช้ perl (ซึ่งเป็นสิ่งต้องห้าม) ฉันจะทำสิ่งนี้: diff -y --suppress-common-lines -W $COLUMNS Eclipse_Preferences_Export_*.epf | perl -pe 's/.*\t|\t(.*)$/\1/g'
24 shell-script  sed  awk  diff 

5
คุณจะเปรียบเทียบสองโฟลเดอร์และคัดลอกความแตกต่างไปยังโฟลเดอร์ที่สามได้อย่างไร
คุณมีสามโฟลเดอร์: โฟลเดอร์ปัจจุบันซึ่งมีไฟล์ปัจจุบันของคุณ โฟลเดอร์เก่าซึ่งมีไฟล์เดียวกันเวอร์ชันเก่ากว่า ความแตกต่างของโฟลเดอร์ซึ่งเป็นเพียงโฟลเดอร์ว่าง คุณเปรียบเทียบเก่ากับปัจจุบันและคัดลอกไฟล์ที่แตกต่างกัน (หรือใหม่ทั้งหมด) ในปัจจุบันเพื่อความแตกต่างได้อย่างไร ฉันได้ค้นหาไปรอบ ๆ และดูเหมือนจะเป็นเรื่องง่าย ๆ ที่จะแก้ไขปัญหา แต่ฉันไม่สามารถทำให้มันทำงานได้ในตัวอย่างเฉพาะของฉัน แหล่งที่มาส่วนใหญ่แนะนำให้ใช้rsyncดังนั้นฉันจึงลงเอยด้วยคำสั่งต่อไปนี้: rsync -ac --compare-dest=../old/ new/ difference/ สิ่งนี้จะ แต่เป็นสำเนาไฟล์ทั้งหมดจากใหม่จะแตกต่างกันแม้กระทั่งผู้ซึ่งเป็นเช่นเดียวกับในเก่า ในกรณีที่ช่วยได้ (อาจเป็นคำสั่งที่ดีและความผิดอยู่ที่อื่น) นี่คือวิธีที่ฉันทดสอบนี้: ฉันทำทั้งสามโฟลเดอร์ ฉันทำไฟล์ข้อความหลายที่มีเนื้อหาที่แตกต่างกันในเก่า ผมคัดลอกไฟล์จากเก่าไปใหม่ ฉันเปลี่ยนเนื้อหาของไฟล์บางไฟล์เป็นไฟล์ใหม่และเพิ่มไฟล์เพิ่มเติมอีกสองสามไฟล์ ฉันวิ่งคำสั่งดังกล่าวและการตรวจสอบผลในความแตกต่าง ฉันกำลังมองหาวิธีการแก้ปัญหาสำหรับสองสามวันที่ผ่านมาและฉันขอขอบคุณความช่วยเหลือ ไม่จำเป็นต้องใช้ rsync แต่ฉันอยากรู้ว่าฉันทำอะไรผิดถ้าเป็นไปได้
23 files  rsync  diff  file-copy 

2
ต่างกันตรงไหนที่เส้นส่วนใหญ่เหมือนกัน แต่ไม่เป็นระเบียบ?
ฉันต้องการแยกกฎ mod_rewrite สองชุด ชุดของเส้นเหมือนกันประมาณ 90% แต่ลำดับแตกต่างกันมากโดยทั่วไปต่างบอกว่าพวกเขาแตกต่างกันโดยสิ้นเชิง ฉันจะดูว่าบรรทัดใดที่แตกต่างกันอย่างแท้จริงระหว่างสองไฟล์โดยไม่คำนึงถึงหมายเลขบรรทัดของพวกเขา

3
วิธีแก้ไขข้อความ“ Hunk # 1 FAILED ที่ 1 (สิ้นสุดบรรทัดที่แตกต่างกัน)”
ฉันพยายามสร้างแพตช์ด้วยคำสั่ง git diff sourcefile >/var/lib/laymab/overlay/category/ebuild/files/thepatch.patch เมื่อฉันใช้แพทช์มันให้ฉัน $ patch -v GNU patch 2.7.5 $ /usr/bin/patch -p1 </var/lib/laymab/overlay/category/ebuild/files/thepatch.patch patching file sourcefile Hunk #1 FAILED at 1 (different line endings). Hunk #2 FAILED at 23 (different line endings). Hunk #3 FAILED at 47 (different line endings). Hunk #4 FAILED at 65 (different line …
22 git  diff  newlines  patch 

6
เปรียบเทียบไดเรกทอรี แต่ไม่ใช่เนื้อหาของไฟล์
ด้วย diff -r ฉันสามารถทำงานนี้ได้อย่างไรก็ตามใช้เวลานานมากเพราะ diff ตรวจสอบเนื้อหาของไฟล์ ฉันต้องการสิ่งที่กำหนดว่าไฟล์สองไฟล์นั้นมีขนาดเท่ากันแก้ไขล่าสุด ฯลฯ แต่ไม่มีการตรวจสอบทีละบิตไฟล์ (ตัวอย่างเช่นวิดีโอใช้เวลานานมาก) มีวิธีอื่น ๆ ?

5
เอาท์พุทบรรทัดทั่วไป (ความเหมือน) ของไฟล์ข้อความสองไฟล์ (ตรงกันข้ามกับ diff)?
Diff เป็นเครื่องมือที่ยอดเยี่ยมในการแสดงการเปลี่ยนแปลงระหว่างสองไฟล์ แต่วิธีการแสดงความคล้ายคลึงกันของไฟล์ข้อความสองไฟล์ (ในขณะที่ละเว้นความแตกต่าง)? Ie ตัวอย่างอินพุต: a: Foo Bar X Hello World 42 b: Foo Baz Hello World 23 Pseudo output (บางอย่างเช่นนี้): @@ 2,3 =Hello World เพียงแค่เรียงลำดับทั้งไฟล์และการใช้งานคอมไม่เพียงพอเพราะในกรณีนี้ข้อมูลเส้นจะหายไป

3
แสดงเฉพาะ hunks ที่เกี่ยวข้องของ diff / patch ตาม regexp
git log -G<regex> -pเป็นเครื่องมือที่ยอดเยี่ยมในการค้นหาประวัติของ codebase สำหรับการเปลี่ยนแปลงที่ตรงกับรูปแบบที่ระบุ อย่างไรก็ตามมันอาจเป็นเรื่องยากที่จะค้นหาก้อนใหญ่ที่เกี่ยวข้องในเอาท์พุท diff / patch ในทะเลของนักล่าที่ไม่เกี่ยวข้องส่วนใหญ่ แน่นอนว่าเป็นไปได้ที่จะค้นหาผลลัพธ์ของgit logสตริง / regex ดั้งเดิม แต่ก็มีน้อยที่จะลดเสียงรบกวนที่มองเห็นและการเบี่ยงเบนของการเปลี่ยนแปลงที่ไม่เกี่ยวข้องจำนวนมาก อ่านต่อgit logไปฉันเห็นว่ามันมี--pickaxe-allซึ่งตรงข้ามกับสิ่งที่ฉันต้องการ: มันขยายเอาต์พุต (ไปยังชุดการเปลี่ยนแปลงทั้งหมด) ในขณะที่ฉันต้องการ จำกัด (เฉพาะก้อนใหญ่) โดยพื้นฐานแล้วฉันกำลังมองหาวิธี "แยกแยะ" อย่างชาญฉลาด "ในการแยก diff / patch ลงใน hunks แต่ละอันแล้วทำการค้นหากับแต่ละก้อนใหญ่ (กำหนดเป้าหมายเพียงแค่บรรทัดที่เปลี่ยนไป) ทิ้งกลุ่ม hunks ที่ไม่ตรงกัน ที่ทำ มีเครื่องมือเช่นที่ฉันอธิบายอยู่หรือไม่? มีวิธีการที่ดีกว่าในการได้รับการจับคู่หรือได้รับผลกระทบหรือไม่? งานวิจัยเริ่มแรกที่ฉันทำ ... หากเป็นไปได้ที่จะgrepส่งออก diff / patch และทำให้ค่าตัวเลือกบริบทเป็นแบบไดนามิก - พูดผ่าน …
20 git  diff  patch 

2
ฉันจะบันทึกการเปลี่ยนแปลงในบัฟเฟอร์ vim ของฉันเป็นไฟล์แพตช์ได้อย่างไร
มีวิธีบันทึกการเปลี่ยนแปลงที่ฉันทำกับ vim buffer ของฉันเป็นไฟล์แพทช์สำหรับไฟล์ต้นฉบับโดยไม่บันทึกเป็นไฟล์แยกต่างหากและใช้ diff หรือไม่?
20 vim  diff 

5
เหตุใดจึงต้องใช้ diff / patch เมื่อง่ายต่อการใช้ cp
diff -u file1.txt file2.txt > patchfile สร้างไฟล์แพตช์ซึ่งประกอบด้วยคำสั่งสำหรับpatchการแปลง file1.txt ให้เหมือนกับ file2.txt ไม่สามารถใช้cpคำสั่งแทนได้หรือไม่ ฉันสามารถจินตนาการว่านี่จะเป็นประโยชน์เมื่อไฟล์มีขนาดใหญ่เกินไปและต้องถูกถ่ายโอนผ่านเครือข่ายซึ่งวิธีการนี้อาจช่วยประหยัดแบนด์วิดท์ มีวิธีอื่นในการใช้ diff / patch ซึ่งจะเป็นประโยชน์ในสถานการณ์อื่น ๆ หรือไม่?
19 shell  cp  diff  patch 

7
วิธีใช้ patch และ diff เพื่อรวมสองไฟล์และแก้ไขข้อขัดแย้งโดยอัตโนมัติ
ฉันได้อ่านเกี่ยวกับ diff และ patch แต่ฉันไม่สามารถหาวิธีใช้สิ่งที่ฉันต้องการ ฉันเดาว่ามันค่อนข้างง่ายดังนั้นเพื่อแสดงปัญหาของฉันให้ใช้สองไฟล์นี้: a.xml <resources> <color name="same_in_b">#AAABBB</color> <color name="not_in_b">#AAAAAA</color> <color name="in_b_but_different_val">#AAAAAA</color> <color name="not_in_b_too">#AAAAAA</color> </resources> b.xml <resources> <color name="same_in_b">#AAABBB</color> <color name="in_b_but_different_val">#BBBBBB</color> <color name="not_in_a">#AAAAAA</color> </resources> ฉันต้องการมีเอาต์พุตซึ่งมีลักษณะเช่นนี้ (ลำดับไม่สำคัญ): <resources> <color name="same_in_b">#AAABBB</color> <color name="not_in_b">#AAAAAA</color> <color name="in_b_but_different_val">#BBBBBB</color> <color name="not_in_b_too">#AAAAAA</color> <color name="not_in_a">#AAAAAA</color> </resources> การผสานควรมีบรรทัดทั้งหมดตามกฎง่าย ๆ นี้: บรรทัดใด ๆ ที่อยู่ในไฟล์เดียวเท่านั้น หากบรรทัดมีแท็กชื่อเดียวกัน แต่มีค่าต่างกันให้นำค่าจากวินาที ฉันต้องการใช้งานนี้ในสคริปต์ทุบตีดังนั้นจึงไม่จำเป็นต้องทำโดยใช้ diff …

4
รับการเปลี่ยนแปลงต่าง ๆ ระหว่างไฟล์ต้นฉบับที่ติดตั้งด้วย apt และไฟล์ปัจจุบัน
ผมติดตั้งphp5-fpmแพคเกจการใช้apt; ฉันทำการเปลี่ยนแปลงบางอย่างกับไฟล์การกำหนดค่า PHP ตอนนี้ฉันจะได้รับความแตกต่างระหว่างเวอร์ชันดั้งเดิมของไฟล์ (ที่ติดตั้งอยู่ในแพ็คเกจ) และเวอร์ชันปัจจุบัน (แก้ไขโดยฉัน) ทำอย่างไร?
19 ubuntu  debian  apt  diff 

3
เพจเจอร์ Git น้อยลง แต่สิ่งที่ทำให้สีออกมา?
lessตัวเองไม่สามารถทำการเน้นไวยากรณ์ได้ตามเธรดนี้ อย่างไรก็ตามgit diffอย่างดีแสดงสีออกในน้อยเพจเจอร์เริ่มต้น เมื่อฉันเปลี่ยนเส้นทางการส่งออกgit diffไปยังไฟล์จะไม่มีลำดับการหลีกเลี่ยงสีปรากฏให้เห็น git diffทราบหรือไม่ว่ามันถูกส่งไปที่ใดและจัดรูปแบบผลลัพธ์ตามนั้น เราจะทำอย่างนั้นได้อย่างไร? ฉันเพิ่งสังเกตเห็นว่าคอมไพล์สีdiffเอาท์พุท (เช่นgit diff) แต่มันไม่ทราบวิธีการเน้นไวยากรณ์โดยทั่วไป เช่น git show 415fec6:log.tex ไม่เปิดใช้งานไวยากรณ์เหมือน TeX ใด ๆ อ่านgitแหล่งฉันพบคำแนะนำดังต่อไปนี้ ในdiff.h: int use_color; ก่อนหน้านี้ฉันอ้างถึงการเน้นไวยากรณ์แต่นั่นไม่ถูกต้อง สิ่งที่ฉันหมายถึงคือการระบายสีเอาท์พุทดูตัวอย่าง
18 colors  git  diff  pager  colordiff 

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