ฉันจะใช้โปรแกรมปะแก้ diff บน Windows ได้อย่างไร


136

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

ฉันลองใช้ TortoiseSVN ฉันมีแพทช์ที่ฉันต้องการสมัคร ฉันคลิกขวาที่แพทช์และมีตัวเลือกภายใต้เมนูย่อย TortoiseSVN ที่ระบุว่า "ใช้แพตช์" ทั้งหมดนี้ก็คือดึงหน้าต่างว่างขึ้นมา

ดังนั้นฉันจึงลองกดปุ่ม Open มันมีสองตัวเลือก: ผสานและใช้ diff แบบรวม (แพทช์อยู่ในรูปแบบ diff แบบรวมโชคดี) แต่ตัวเลือกการใช้ที่เรียบง่ายไม่ทำงาน: มันขอแพทช์และโฟลเดอร์ อย่างใดก็ลืมที่จะขอไฟล์ที่จะใช้แพทช์! TortoiseSVN เพียงธรรมดาจึงไม่ทำงาน มียูทิลิตีที่ใช้ Windows GUI ที่จะทำการปะและไฟล์และใช้อย่างถูกต้องหรือไม่?

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


คำตอบ WinMerge ฟังดูดี แต่อธิบายวิธีการทำแพทช์ไม่ใช่วิธีนำไปใช้ TortoiseHG มีวิธีที่ยอดเยี่ยมในการใช้โปรแกรมปะแก้ แต่เฉพาะกับไฟล์ที่อยู่ใน repo hg เท่าที่ฉันรู้ หาก SVN TortoiseDiff ภายนอกไม่สามารถทำได้ฉันสงสัยว่าเครื่องมือ GUI ใด ๆ สามารถทำได้หรือไม่
Warren P

3
ว้าวคุณพูดถูกแล้วคำตอบสั้น ๆ ก็ยังไม่ใช่ - อย่างน้อยก็ใน WinMerge คำขอเกี่ยวกับ WinMerge ที่นี่sourceforge.net/tracker/…
KCD

คำตอบ:


32

ใช้ Patch

ด้วย TortoiseMerge:

  1. ค้นหาและเปิดไดเรกทอรี repo SVN ที่มีอยู่
  2. สร้างไดเรกทอรีใหม่ชื่อ "การผสาน" ถ้าไม่มีอยู่แล้ว
  3. คัดลอกไฟล์ลงบนที่คุณต้องการใช้ไฟล์. patch
  4. เพิ่มและ COMMIT ไปยังที่เก็บ svn ก่อนที่คุณจะไปยังขั้นตอนถัดไป
  5. คลิกขวาที่การรวมและเลือกใช้การแก้ไข ...
  6. ดับเบิลคลิกที่ไฟล์จากรายการ
  7. ไฟล์ที่ถูกแพทช์พร้อม diff จะแสดงขึ้นในบานหน้าต่างด้านขวา
  8. คลิกที่บานหน้าต่างนั้นแล้วกดบันทึกหรือส่งออกด้วยไฟล์ -> บันทึกเป็น ...

ทางเลือกอื่นหากคุณเปิดจาก TortoiseMerge ในหน้าจอด้านล่างไดเรกทอรีหมายถึงไดเรกทอรี "ผสาน" ที่กล่าวถึงในขั้นตอนที่ 2 ด้านบน: Screeny

สกรีนช็อตของ WinMerge GUI: Screeny


@WarrenP: ใช่มันอธิบายวิธีการใช้ patch โดยใช้ TortoiseMerge
Walter Stabosz

4
ความคิดเห็นของฉันสมเหตุสมผลก่อนการแก้ไขและไม่เหมาะสมหลังจากการแก้ไขอีกต่อไป คุณสับสนหรือยัง การแก้ไขการประทับเวลาด้านบน (24 มีนาคม '11) ดูเหมือนจะไม่ถูกต้องเนื่องจาก OP ได้แก้ไขคำตอบของเขาอีกครั้งตั้งแต่ตุลาคม 2011 ฉันคิดว่าการประทับเวลาในความคิดเห็นของฉันก็ไม่ถูกต้องเช่นกัน
Warren P

9
@SheriffMd คุณไม่ได้รับข้อผิดพลาด "D: \ Folder ไม่ใช่สำเนาที่ใช้งานได้" หรือไม่?
onmyway133

1
@SheriffMd ฉันยังได้รับข้อความ "โฟลเดอร์ ... ไม่ใช่สำเนาที่ใช้งานได้" - แล้วมันเป็นไปได้ยังไงที่จะใช้การผสานเต่าเพื่อนำ patch มาใช้กับไฟล์ที่ไม่ใช่เวอร์ชั่น
Peter T.

1
@ onmyway133 ฉันได้ใช้ขั้นตอนใหม่อีกครั้ง อ้างถึงขั้นตอนที่ 2 และขั้นตอนที่ 4 คุณจะไม่ได้รับข้อความแสดงข้อผิดพลาด "ไม่ใช่สำเนาที่ใช้งานได้"
นายอำเภอ

21

ฉันทำเครื่องมือหลามบริสุทธิ์เพียงสำหรับการที่ มันมีพฤติกรรมข้ามแพลตฟอร์มที่คาดการณ์ได้ แม้ว่าจะไม่ได้สร้างไฟล์ใหม่ (ในขณะที่เขียนนี้) และไม่มี GUI แต่ก็สามารถใช้เป็นไลบรารีเพื่อสร้างเครื่องมือกราฟิก

UPDATE : ควรจะสะดวกกว่าถ้าคุณติดตั้ง Python

pip install patch
python -m patch

1
ฉันใช้มันมาก ขอบคุณ @techtonik มีข่าวเกี่ยวกับการทำงานกับ Python3 ไหม?
pelson

เรียกใช้โปรแกรมแก้ไขการติดตั้ง pip ด้วยสิทธิ์ของผู้ดูแลระบบเพื่อให้แน่ใจว่าทำงานได้
Vertexwahn

@Vertexwahn มันเป็นบน Linux?
Anatoly techtonik

Python ทำงานได้ทุกที่ - ฉันทดสอบด้วย Windows 10
Vertexwahn

ทำงานบน Windows 10 เมื่อ git patch ไม่ทำงาน ขอบคุณ!
sqrl0

19

TortoiseMergeเป็นโปรแกรมอรรถประโยชน์แยกต่างหากที่มาพร้อมกับ TortoiseSVN

นอกจากนี้ยังสามารถดาวน์โหลดแยกต่างหากในไฟล์เก็บถาวรTortoiseDiff.zip สิ่งนี้จะช่วยให้คุณสามารถใช้ diffs แบบรวมกับไฟล์ที่ไม่ใช่เวอร์ชันได้


21
AFAIK สิ่งนี้ไม่สามารถนำ patch มาใช้กับไฟล์ที่ไม่ใช่เวอร์ชั่น
pihentagy

ฉันไม่มีปัญหาในการใช้กับไฟล์ที่ไม่มีเวอร์ชัน
พอลแชนนอน

คนอื่น ๆ ต้องการ: S
UmNyobe

1
รุ่น 1.8.7 ให้ข้อผิดพลาดเกี่ยวกับปลายทางที่ไม่ได้เป็นรุ่น
Nick Westgate

15

ฉันรู้ว่าคุณบอกว่าคุณต้องการ GUI แต่เครื่องมือ commandline จะทำงานได้ดี ดูGnuWinสำหรับพอร์ตเครื่องมือยูนิกซ์ไปยัง Windows คุณต้องการคำสั่งแก้ไขแน่นอน ;-)

คุณอาจพบปัญหากับการยกเลิกสายแม้ว่า พอร์ต GnuWin จะสมมติว่า patchfile มีการยกเลิกบรรทัดลักษณะของ DOS (CR / LF) ลองเปิดไฟล์ patchfile ในโปรแกรมแก้ไขอัจฉริยะที่สมเหตุสมผลแล้วมันจะแปลงไฟล์ให้คุณ


ใส่กัน จะไม่สามารถที่จะหาปัญหาการเลิกจ้างโดยไม่มีความคิดเห็นนี้
ไบรอัน

อีกวิธีในการจัดการกับการสิ้นสุดบรรทัดคือการเพิ่มตัวเลือก "--binary" ในบรรทัดคำสั่ง
BeReal82

4
นี่คือสิ่งที่ทำให้ฉันไปถูกทาง อย่างไรก็ตามการรัน Windows 7 หรือใหม่กว่านั้นคุณจำเป็นต้องอัพเดทรายการของ patch.exe เพื่อหลีกเลี่ยงการป๊อปอัป UAC ในแต่ละครั้ง ดูหน้านี้สำหรับวิธีการ: math.nist.gov/oommf/software-patchsets/patch_on_Windows7.html
Anttu

1
ถึงแม้ว่าจะมีการแก้ไข UAC แต่โปรแกรมแก้ไขเวอร์ชัน GnuWin ยังช่วยแก้ไขปัญหาการตั้งค่าความปลอดภัยของไฟล์ บิลด์ที่มาพร้อมกับคอมไพล์ไม่ได้รับผลกระทบจากปัญหาใด ๆ
Artfunkel

8

ใน TortoiseSVN การใช้โปรแกรมปะแก้จะใช้งานได้ คุณจำเป็นต้องใช้แพทช์ไปยังไดเรกทอรีเดียวกับที่มันถูกสร้างขึ้นจาก เป็นสิ่งสำคัญเสมอที่จะคำนึงถึงเรื่องนี้ ดังนั้นนี่คือวิธีที่คุณทำใน TortoiseSVN:

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

โชคดี.


8
นั่นไม่ได้ช่วยอะไร ไฟล์ปลายทางไม่ได้มาจากไฟล์เก็บถาวร SVN (ดูการแก้ไขเพื่อโพสต์ต้นฉบับ.)
เมสันล้อ

8

ยูทิลิตี้ patch.exe จากการติดตั้ง Git ทำงานบน Windows 10

ติดตั้งGit สำหรับ Windowsจากนั้นใช้"C:\Program Files\Git\usr\bin\patch.exe"คำสั่งเพื่อใช้ชุดข้อมูลแก้ไข

หากข้อความแสดงข้อผิดพลาดเช่น a Hunk #1 FAILED at 1 (different line endings).ได้เกิดขึ้นระหว่างการใช้โปรแกรมปะแก้ให้ลองเพิ่ม-l(นั่นคือทางลัดสำหรับ--ignore-whitespace) หรือ--binaryสวิตช์ไปยังบรรทัดคำสั่ง


คำถามนี้ส่วนใหญ่เกี่ยวกับเครื่องมือ GUI สำหรับผู้ใช้ทั่วไปที่ไม่คุ้นเคยกับเครื่องมือบรรทัดคำสั่งทั่วไป คำตอบของคุณจะมีประโยชน์มากขึ้นถ้าอย่างน้อยคุณก็ให้คำสั่งตัวอย่างเต็มรูปแบบเป็นตัวอย่าง
ÁlvaroGonzález

ทำงานร่วมกับนักแต่งเพลงใน Windows 10
ecdani

7

คุณสามารถใช้พอร์ตดั้งเดิม Win32 นี้ของยูทิลิตี้แพตช์

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

การใช้งานง่าย:

patch.exe -i <patchfile>

รับความช่วยเหลือเพิ่มเติม:

patch.exe --help

4
ฉันมีปัญหากับเรื่องนี้ใน Windows 7: จะเปิดหน้าต่าง CMD patch.exeใหม่และแจ้งให้สำหรับสิทธิ์ของผู้ดูแลเมื่อฉันพยายามที่จะวิ่ง
Roy Tinker

3
สามารถเรียกใช้งานโปรแกรมปะแก้ได้ในชุดรวม Git สำหรับ Windows
Snicksie

6
หากคุณกำลังทำงานเป็นปัญหาการทำงาน patch.exe patchคุณสามารถเปลี่ยนชื่อเป็นอะไรที่ไม่รวมถึง Windows จะพิจารณาว่ามีคำทั้งหมดpatchที่น่าสงสัย
wbond

2

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

คุณสามารถติดตั้งCygwinจากนั้นใช้เครื่องมือแก้ไขบรรทัดคำสั่งเพื่อใช้โปรแกรมแก้ไข ดูเพิ่มเติมนี้หน้าคน Unixซึ่งนำไปใช้กับแพทช์


4
ใช่ฉันทำได้ อันที่จริงฉันมี Cygwin แล้ว ฉันอาจทำให้โซลูชันของคุณใช้งานได้เช่นกัน ฉันจะไม่ให้ผู้ใช้ของฉันผ่านที่แม้ว่า คุณมีความคิดว่าในวันนี้มีผู้ใช้ Windows กี่คนที่ไม่รู้ว่าบรรทัดคำสั่งคืออะไร : P
Mason Wheeler

2

ปรากฏว่า TortoiseSVN (TortoiseMerge) ต้องการบรรทัดIndex: foobar.pyในไฟล์ diff / patch นี่คือสิ่งที่ฉันต้องทำเพื่อให้ไฟล์ patch ที่ไม่ใช่ TortoiseSVN ทำงานร่วมกับ TortoiseSVN คลิกขวาที่คำสั่งApply Patch

ก่อน:

--- foobar.py.org   Sat May 08 16:00:56 2010
+++ foobar.py   Sat May 08 15:47:48 2010

หลังจาก:

Index: foobar.py
===================================================================
--- foobar.py
+++ foobar.py   (working copy)

หรือถ้าคุณรู้ว่าการแก้ไขเฉพาะที่ผู้มีส่วนร่วมของคุณทำงานจาก:

Index: foobar.py
===================================================================
--- foobar.py   (revision 1157)
+++ foobar.py   (working copy)

2

ฉันใช้ MSYS2 จากhttp://www.msys2.org/

มันมีหลายอย่างเช่นสาธารณูปโภคpatch, which, git, treeและอื่น ๆ อีกมากมาย

หลังจากติดตั้ง MSYS2 เพียงแค่เรียกใช้ตัวจัดการแพคเกจเพื่อติดตั้งpatch:

pacman -S patch

นี่เป็นเพียงวิธีที่ซับซ้อนในการติดตั้งเครื่องมือบรรทัดคำสั่ง ฉันสงสัยว่าคุณเพียงแค่อ่านชื่อคำถามไม่ใช่ตัวคำถามเอง :)
ÁlvaroGonzález

1

แพตช์บอกไฟล์ที่จะนำไปใช้ ส่วนหัวควรเป็นสิ่งที่ต้องการ (ดูใน Notepad หรือตัวแก้ไขข้อความที่ชอบ):

--- Folder/old_file
+++ Folder/new_file

ในกรณีของแพทช์การโค่นล้มคุณจะมีหมายเลขการแก้ไขอีกด้วย (เนื่องจากชื่อไฟล์เหมือนกัน)

โปรแกรมแก้ไข GNUจะให้คุณแทนที่ชื่อเหล่านั้น แต่ฉันไม่รู้เครื่องมือ GUI ใด ๆ ที่จะทำเช่นเดียวกัน ฉันจะตรวจสอบกับโปรแกรม diff ต่าง ๆ - แม้ว่าจะไม่ปรากฏว่า WinMerge รองรับการใช้แพตช์


ไม่ไม่มีอะไรที่ด้านบนสุดของแพทช์ของฉัน คุณกำลังบอกว่าชื่อไฟล์และเส้นทางจะต้องรวมอยู่ในส่วนต่างหรือไม่? ใครคิดแบบนั้น คุณควรทำอย่างไรถ้าคุณต้องการแจกจ่ายสิ่งที่แตกต่างให้กับคนที่อาจมีสิ่งต่าง ๆ ติดตั้งอยู่ในโฟลเดอร์อื่น?!?
Mason Wheeler

ส่วนบนของตัวปะแก้เริ่มต้นดังนี้: --- / +++ / @@ -6,12 +6,12 @@ ไม่มีชื่อไฟล์หรืออะไร เส้นทางในตัวควรทำงานอย่างไร จะเกิดอะไรขึ้นถ้าฉันสร้างแพตช์ใน XP และมีคนพยายามใช้มันบน Vista (หรือกลับกัน) และพา ธ ไปยังโฟลเดอร์เอกสารนั้นแตกต่างกันหรือไม่
Mason Wheeler

1
ชื่อไฟล์นั้นสัมพันธ์กับไดเรกทอรีรูทของที่เก็บดังนั้นความแตกต่างของโครงสร้างโฟลเดอร์ XP / Vista จึงไม่สำคัญ และสาเหตุของการมีชื่อไฟล์ในโปรแกรมปะแก้คือแพตช์ส่วนใหญ่มีผลต่อไฟล์หลายไฟล์
David Z

ฉันเห็น. ตกลงที่เหมาะสมมากขึ้น ขอบคุณที่ช่วยเคลียร์ดาวิด!
Mason Wheeler

1

Eclipse ควรสามารถทำได้ไปที่ TeamSynchronize เปอร์สเปคทีฟจากนั้นไปที่ Project-> Apply patch


1

สำหรับโครงการ Java ฉันใช้NetBeansเพื่อนำไฟล์ปะแก้ไปใช้ หากรหัส Java ที่คุณกำลังแก้ไขไม่ใช่โครงการ NetBeans ให้สร้างโครงการสำหรับมัน วิธีสร้างโครงการใหม่:

  • เลือกเมนูไฟล์ -> โครงการใหม่
  • ในกล่องโต้ตอบที่เกิดขึ้นทำให้มันเป็นโครงการ Java Application Finishให้มันชื่อในกล่องโต้ตอบและคลิก
  • คลิกขวาที่ชื่อโครงการของคุณแล้วเลือกคุณสมบัติจากเมนูบริบท
  • ในกล่องโต้ตอบที่ปรากฏขึ้นให้เลือกแหล่งที่มาและเพิ่มโฟลเดอร์ต้นทาง เรียกดูแหล่ง Java ของคุณ

ตอนนี้คุณมีโครงการแล้วให้ใช้โปรแกรมแก้ไข:

  • ไฮไลต์โครงการของคุณเพื่อเลือก
  • จากเมนูหลักเลือกเมนูTools -> Apply Diff Patch
  • ในกล่องโต้ตอบผลลัพธ์ให้เรียกดูไฟล์แพตช์ของคุณเลือกไฟล์แล้วกดปุ่ม Patch

แค่นั้นแหละ. ควรใช้โปรแกรมปะแก้ของคุณและคุณจะเห็นหน้าต่างต่างแสดงการเปลี่ยนแปลง



1

หากคุณใช้Mercurial การดำเนินการนี้จะทำผ่าน "นำเข้า" ดังนั้นที่บรรทัดhg importคำสั่งคำสั่งหรือ (คุณอาจพบว่า--no-commitตัวเลือกมีประโยชน์) หรือ "Repository" => "Import ... " ใน Hg Workbench

โปรดทราบว่าสิ่งเหล่านี้จะส่งการเปลี่ยนแปลงตามค่าเริ่มต้น คุณสามารถหลีกเลี่ยงสิ่งนี้ได้โดยใช้ hg import --no-commitตัวเลือกหากใช้บรรทัดคำสั่งหรือถ้าคุณใช้ Hg Workbench คุณอาจพบว่ามีประโยชน์ในการออกhg rollbackหลังจากการผสาน


สิ่งที่ฉันกำลังมองหา! ฉันสงสัยว่าจะหลีกเลี่ยงความมุ่งมั่นได้อย่างไร
Keshav

0

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

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


0

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


0

หากคุณได้รับข้อความแสดงข้อผิดพลาด "ไม่ใช่สำเนาที่ใช้งานได้" ให้ลองเลือกไดเรกทอรีจากกล่องโต้ตอบ TortoiseMerge ซึ่งเป็นไดเรกทอรีทำงานของ SVN


0

BusyBoxพอร์ตสำหรับ Windows มีทั้งความแตกต่างและแพทช์คำสั่ง แต่พวกเขาเท่านั้นที่สนับสนุนรูปแบบครบวงจร


0

เพียงใช้:

patch -p0 < path-file.patch

อย่าลืมเรียกใช้คำสั่งนี้จากตำแหน่งโฟลเดอร์ที่คุณสร้างแพตช์เท่านั้น

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