ฉันมีแอปพลิเคชันfoobar
ที่มีคนเขียนแพทช์เพื่อเพิ่มคุณสมบัติที่ฉันชอบ ฉันจะใช้ตัวแก้ไขได้อย่างไร
ฉันมีแอปพลิเคชันfoobar
ที่มีคนเขียนแพทช์เพื่อเพิ่มคุณสมบัติที่ฉันชอบ ฉันจะใช้ตัวแก้ไขได้อย่างไร
คำตอบ:
แพตช์มักจะมีอยู่ใน.diff
ไฟล์เพราะแพทช์ถูกสร้างขึ้นโดยใช้diff
คำสั่ง
โปรแกรมแก้ไขคือชุดของการแทรกและการลบลงในซอร์สโค้ด ด้วยเหตุนี้ในการใช้โปรแกรมแก้ไขคุณต้องสร้างแอปพลิเคชัน (เช่น "foobar") จากแหล่งที่มาหลังจากใช้โปรแกรมแก้ไข ดังนั้นในขั้นตอน:
1. ได้รับแพคเกจที่มาสำหรับfoobar
การแจกแจงลินุกซ์ส่วนใหญ่ (การแพตช์ nb ไม่ได้เป็นเอกสิทธิ์ของลินุกซ์) มี "แพ็คเกจแพกเกจ" ที่คุณสามารถใช้เพื่อจุดประสงค์นี้ได้ แต่เนื่องจากสิ่งเหล่านี้มีความแตกต่างกันฉันจะอ้างอิงเฉพาะ แหล่งดั้งเดิมไม่ได้เป็นส่วนหนึ่งของ distro และอาจหายาก จุดเริ่มต้นที่ดีคือวิกิพีเดียซึ่งมีบทความสำหรับแอปพลิเคชันยอดนิยมมากมายและบทความควรมีลิงค์ไปยังหน้าแรกที่มีแหล่งดาวน์โหลด คุณยังสามารถ google ด้วยตัวคุณเองได้อย่างชัดเจน foobar.0.1.tar.bz2
แพคเกจแหล่งที่มาจะถูกเรียกว่าสิ่งที่ต้องการ แตกไฟล์ออก - ตอนนี้คุณมีไดเรกทอรีชื่อfoobar.0.1
แล้ว
2. เพิ่มชุดข้อมูลแก้ไข
บางครั้งแพทช์เป็นไฟล์เดียวและบางครั้งก็เป็นชุดของไฟล์หลายไฟล์ คัดลอกเหล่านั้นลงและfoobar.0.1
cd foobar.0.1
ถัดไปคุณต้องเรียกใช้patch
คำสั่ง สิ่งนี้อ่านจากอินพุตมาตรฐานดังนั้นคุณต้องการไพพ์.diff
ไฟล์ส่วนที่ยุ่งยากจะกำหนดว่าจะใช้สำหรับ-p
ตัวเลือกใด (หากไม่มีคำแนะนำเกี่ยวกับแพตช์) ในการทำเช่นนั้นคุณต้องดูที่จุดเริ่มต้นของไฟล์แก้ไข ตัวอย่างเช่น:
--- old/comm.c 2003-09-08 14:25:08.000000000 +0000
+++ new/comm.c 2006-07-07 02:39:24.000000000 +0000
ในกรณีนี้comm.c
คือชื่อของไฟล์ต้นฉบับที่จะถูกแก้ไข อย่างไรก็ตามโปรดสังเกตว่ามีไดเรกทอรีต่อท้ายอยู่ เนื่องจากสิ่งเหล่านี้ไม่ใช่ไดเรกทอรีเดียวกัน ("เก่า" กับ "ใหม่") นี่เป็นเบาะแสอันยิ่งใหญ่ที่ส่วนนี้ของเส้นทางเป็นขยะ (สำหรับจุดประสงค์ของเรา) วัตถุประสงค์ของ-p
สวิตช์ (ดูman patch
) คือการกำจัดส่วนนำหน้านี้ ใช้จำนวนซึ่งเป็นจำนวนเครื่องหมายทับ ( /
) เพื่อกำจัดพร้อมทุกสิ่งในระหว่าง ในกรณีนี้เราจะใช้เพื่อลดเส้นทางที่จะเพียงแค่ธรรมดา-p1
comm.c
ความcomm.c
จริงนั้นอยู่ในไดเรกทอรีเดียวกันซึ่งจะเป็นอีกเงื่อนงำว่าการตีความของคุณถูกต้องหรือไม่ หากทั้งสองบรรทัดนั้นอยู่src/comm.c
และcomm.c
อยู่ในsrc
ไดเรกทอรีย่อยของโครงสร้างการสร้างของคุณคุณต้องใช้-p0
- ระวังที่ไม่ได้ใช้-p
เลยจะเป็นการลบเครื่องหมายทับทั้งหมด หากเส้นทางเป็นแบบสัมบูรณ์ (เช่นเริ่มต้นด้วย/
) นั่นอาจเป็นสิ่งที่คุณต้องการ ตอนนี้ใช้แพทช์:
patch -p1 < patch.diff
แหล่งที่มาได้รับการแก้ไขแล้ว หากมี.diff
ไฟล์เพิ่มเติมให้ใช้วิธีเดียวกัน
3. สร้างและติดตั้ง
นี้เป็นกระบวนการปกติที่คุณจะผ่านไปสร้างอะไรบางอย่างจากแหล่งที่มา - ครั้งแรก./configure
แล้วmake
, ,make check
make install
ก่อนที่คุณจะทำสิ่งสุดท้ายหากคุณมีการติดตั้งอยู่แล้วfoobar
ให้ตัดสินใจว่าคุณต้องการลบหรือเขียนทับสิ่งนั้นหรือวิธีที่คุณจะจัดการกับความขัดแย้งในการตั้งชื่อ คุณอาจต้องการfoobar
อ้างถึงเวอร์ชันใหม่ที่ได้รับการแพตช์แล้วไม่ใช่เวอร์ชันเก่า