ความแตกต่างระหว่างpatch -p0
และpatch -p1
คืออะไร
มีความแตกต่างหรือไม่?
ความแตกต่างระหว่างpatch -p0
และpatch -p1
คืออะไร
มีความแตกต่างหรือไม่?
คำตอบ:
วิธีที่ใช้กันมากที่สุดในการสร้างแพทช์คือการใช้diff
คำสั่งหรือบางตัวอยู่ในการควบคุมของรุ่นdiff
เหมือนคำสั่ง บางครั้งคุณเพิ่งเปรียบเทียบไฟล์สองไฟล์และคุณเรียกใช้diff
ดังนี้:
diff -u version_by_alice.txt version_by_bob.txt >alice_to_bob.patch
จากนั้นคุณจะได้รับโปรแกรมแก้ไขที่มีการเปลี่ยนแปลงสำหรับไฟล์เดียวและไม่มีชื่อไฟล์เลย เมื่อคุณใช้โปรแกรมแก้ไขนั้นคุณต้องระบุไฟล์ที่คุณต้องการใช้กับ:
patch <alice_to_bob.patch version2_by_alice.txt
บ่อยครั้งที่คุณเปรียบเทียบสองโครงการหลายไฟล์ทั้งหมดที่มีอยู่ในไดเรกทอรี คำขอทั่วไปของdiff
ลักษณะเช่นนี้:
diff -ru old_version new_version >some.patch
diff -ru old_version/dir/file new_version/dir/file
แล้วแพทช์ที่มีชื่อไฟล์ที่ได้รับในสายหัวเช่น คุณต้องบอกpatch
ให้ตัดส่วนนำหน้า ( old_version
หรือnew_version
) ออกจากชื่อไฟล์ นั่นคือความ-p1
หมาย: ดึงไดเรกทอรีหนึ่งระดับออก
บางครั้งบรรทัดส่วนหัวในแพตช์มีชื่อไฟล์โดยตรงโดยไม่ต้องรอคอย นี่เป็นเรื่องปกติกับระบบควบคุมเวอร์ชัน ตัวอย่างเช่นผู้ผลิตสายหัวที่มีลักษณะเหมือนcvs diff
จากนั้นก็มีคำนำหน้าแถบไม่ดังนั้นคุณจะต้องระบุdiff -r1.42 foo
-p0
ในกรณีพิเศษเมื่อไม่มีไดเรกทอรีย่อยในทรีที่คุณกำลังเปรียบเทียบไม่มี-p
ตัวเลือกที่จำเป็น: patch
จะยกเลิกส่วนไดเรกทอรีทั้งหมดของชื่อไฟล์ แต่ส่วนใหญ่คุณต้องการ-p0
หรืออย่างใดอย่างหนึ่ง-p1
ขึ้นอยู่กับวิธีการผลิตแพทช์
diff old/foo new/foo >my.patch
หรือdiff ../old/foo foo >my.patch
หรือdiff foo.old foo >my.patch
และผู้ใช้สามารถใช้งานได้patch <my.patch
โดยไม่ต้องสนใจว่าจะมีการผลิตโปรแกรมแก้ไขอย่างไรจากนั้น-p
จึงเพิ่มความสะดวกสบาย แต่ฉันไม่รู้จริง ๆ แล้วว่าpatch
เป็นยูทิลิตี้เก่าและเมื่อฉันเริ่มใช้มัน-p0
หรือ-p1
เป็นวิธีที่ใช้บ่อยที่สุดแล้ว
จากคน:
-pnum
หรือ--strip=num
Strip ส่วนนำหน้าที่เล็กที่สุดที่มี slash นำ NUM จากชื่อไฟล์แต่ละชื่อที่พบในไฟล์แพตช์ ลำดับของสแลชหนึ่งรายการหรือมากกว่าที่อยู่ติดกันถูกนับเป็นสแลชเดี่ยว วิธีนี้จะควบคุมวิธีปฏิบัติต่อชื่อไฟล์ที่พบในไฟล์แพตช์ในกรณีที่คุณเก็บไฟล์ไว้ในไดเรกทอรีที่แตกต่างจากบุคคลที่ส่งแพตช์ออกมา ตัวอย่างเช่นสมมติว่าชื่อไฟล์ในไฟล์แพทช์คือ:/u/howard/src/blurfl/blurfl.c
การตั้งค่า
-p0
ให้ชื่อไฟล์ทั้งหมดยังไม่แปร ,-p1
ให้u/howard/src/blurfl/blurfl.c
โดยไม่ต้องเฉือนชั้นนำ ,
-p4
ให้blurfl/blurfl.c
ความแตกต่างคือจำนวนหลังจากนั้น-p
จะระบุจำนวนขององค์ประกอบของเส้นทางที่จะถูกลบออก
/Barack/Obama
บอกว่าเรามีเส้นทาง การดำเนินการแก้ไขบนมันด้วย-p0
อาร์กิวเมนต์จะถือว่าเส้นทางเป็น :
/Barack/Obama
แต่เราสามารถตัดแต่งเส้นทางในขณะทำการปะ:
-p1
จะลบเครื่องหมายสแลช (โปรดทราบว่าเพิ่งจะเป็นบารักคตอนนี้โดยไม่ต้องใช้เครื่องหมายสแลชเหลืออยู่):
Barack/Obama
-p2
จะลบ Barack (และเครื่องหมายทับขวาติดกัน):
Obama