กลับไปหน้าบทความ

อ่าน 3 นาที

แพทช์ (ยูนิก)

patch`patch` เป็นคำสั่งเชลล์ ที่ใช้อัปเดตไฟล์ข้อความตามคำแนะนำในไฟล์แยกต่างหากที่เรียกว่าไฟล์แพ ทช์...

แพทช์ (ยูนิก)

แพทช์
ผู้เขียนต้นฉบับแลร์รี่ วอลล์
นักพัฒนาพอล เอ็กเกิร์ต, เวย์น เดวิสัน, เดวิด แมคเคนซี, แอนเดรียส กรุนบัคเกอร์
ปล่อย24 พฤษภาคม 2528 ( 24 พฤษภาคม 1985 )
ระบบปฏิบัติการระบบปฏิบัติการ UnixและUnix-like , Plan 9 , MSX-DOS , Microsoft Windows
แพลตฟอร์มข้ามแพลตฟอร์ม
พิมพ์สั่งการ

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

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

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

patchโปรแกรมดั้งเดิมเขียนโดยLarry Wall (ผู้สร้างภาษาโปรแกรมPerl ในภายหลัง ) และโพสต์ไปยัง[ 1 ] (ซึ่งต่อมากลายเป็น) ในเดือนพฤษภาคม พ.ศ. 2528 ได้ถูกเพิ่มเข้าไปใน XPG4 ซึ่งต่อมากลายเป็นPOSIX [ 2 ] โค้ดของ Wall ยังคงเป็นพื้นฐานของโปรแกรม "patch" ที่มีให้ในOpenBSD [ 3 ] FreeBSD [ 4 ]และ schilytools [ 5 ]มูลนิธิซอฟต์แวร์เปิด (Open Software Foundation ) ซึ่งรวมเข้ากับThe Open Groupกล่าวกันว่าได้ดูแลรักษาเวอร์ชันที่ดัดแปลงมาโครงการ GNU / FSFดูแลรักษา patch ของตนเอง ซึ่งแยกมาจากเวอร์ชันของ Larry Wall ที่เก็บข้อมูลแตกต่างจากของ GNU diffutils แต่เอกสารประกอบได้รับการจัดการร่วมกัน[ 6 ]เดิมทีเขียนขึ้นสำหรับ Unix คำสั่งนี้ยังได้รับการพอร์ตไปยังWindows (ผ่านGnuWin32และUnxUtils ) และแพลตฟอร์มอื่นๆ อีกมากมาย การใช้งานเป็นส่วนหนึ่งของเครื่องมือ MSX-DOS2ของASCIIสำหรับMSX-DOSเวอร์ชัน 2 [ 7 ]mod.sourcescomp.sources.unixpatch

ใช้

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

นอกเหนือจากdiffคำสั่งดังกล่าวแล้ว โปรแกรมอื่นๆ เช่นSubversion , CVS , RCS , MercurialและGit ก็สามารถสร้างไฟล์แพทช์ได้เช่น กัน

แพตช์เป็นส่วนประกอบสำคัญของระบบควบคุมเวอร์ชัน หลายระบบ รวมถึง CVSด้วย

ความแตกต่างขั้นสูง

เมื่อใช้ diff ขั้นสูงขึ้น การแก้ไขสามารถทำได้แม้กับไฟล์ที่ได้รับการแก้ไขในระหว่างนั้น ตราบใดที่การแก้ไขเหล่านั้นไม่รบกวนการแก้ไข วิธีการนี้ทำได้โดยการใช้ " context diffs " และ " unified diffs " (หรือที่เรียกว่า "unidiffs") ซึ่งจะล้อมรอบการเปลี่ยนแปลงแต่ละครั้งด้วยบริบทซึ่งเป็นข้อความที่อยู่ก่อนและหลังส่วนที่เปลี่ยนแปลงทันที จากนั้น Patch สามารถใช้บริบทนี้เพื่อระบุตำแหน่งที่จะแก้ไขได้ แม้ว่าตำแหน่งนั้นจะถูกเลื่อนไปเนื่องจากการเปลี่ยนแปลงก่อนหน้านี้ในไฟล์ โดยใช้หมายเลขบรรทัดใน diffs เป็นจุดเริ่มต้น เนื่องจากคุณสมบัตินี้ context และ unified diffs จึงเป็นรูปแบบของ patch ที่นิยมใช้ในการส่งไปยังโครงการซอฟต์แวร์หลายโครงการ

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

ตัวอย่าง

คำสั่งต่อไปนี้จะสร้างไฟล์แพทช์patchFileซึ่งเข้ารหัสวิธีการสร้างnewFileจาก ไฟล์ oldFileต้นฉบับ ตัว-uเลือกจะเลือกให้ส่งออกในรูปแบบความแตกต่างแบบรวม (unified diff format)

$ diff -u oldFile newFile > patchFile 

คำสั่งต่อไปนี้จะใช้การเปลี่ยนแปลงกับไฟล์ที่ระบุไว้ในpatchFile.

$ patch < patchFile 

การแก้ไขไฟล์ในไดเร็กทอรีย่อยต้องใช้ตัวเลือกเพิ่มเติม โดยค่าตัวเลขจะเป็น 1 หากไดเร็กทอรีหลักของโครงสร้างไฟล์ต้นฉบับรวมอยู่ในส่วนต่าง และจะเป็น 0 หากไม่รวมอยู่ด้วย -pnumber

สามารถยกเลิกหรือย้อนกลับการแก้ไขได้โดยใช้-Rตัวเลือก:

$ patch -R < patchFile 

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

ดูเพิ่มเติม

  • GNU Diffutils (ประกอบด้วย diff และ patch); เอกสารประกอบ
  • เครื่องมือ GNU สำหรับ Win32  – เวอร์ชัน Win32 ของเครื่องมือต่างๆ รวมถึง diff และ patch
  • Dickey, Thomas E. "DIFFSTAT – สร้างฮิสโตแกรมจากผลลัพธ์ diff" . เก็บถาวรจากต้นฉบับเมื่อ 2020-01-22 . เรียกดูเมื่อ2020-05-01
ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=Patch_(Unix)&oldid=1353512257 "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ แพทช์ (ยูนิก)

patch`patch` เป็นคำสั่งเชลล์ ที่ใช้อัปเดตไฟล์ข้อความตามคำแนะนำในไฟล์แยกต่างหากที่เรียกว่าไฟล์แพ ทช์...

ใช้

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

ความแตกต่างขั้นสูง

เมื่อใช้ diff ขั้นสูงขึ้น การแก้ไขสามารถทำได้แม้กับไฟล์ที่ได้รับการแก้ไขในระหว่างนั้น ตราบใดที่การแก้ไขเหล่านั้นไม่รบกวนการแก้ไข วิธีการนี้ทำได้โดยการใช้ " context diffs " และ " unified diffs " (หรือที่เรียกว่า "unidiffs")...

ตัวอย่าง

คำสั่งต่อไปนี้จะสร้างไฟล์แพทช์ patchFile ซึ่งเข้ารหัสวิธีการสร้าง newFile จาก ไฟล์ oldFile ต้นฉบับ ตัว -u เลือกจะเลือกให้ส่งออกในรูปแบบความแตกต่างแบบรวม (unified diff format)