ความแตกต่างระหว่าง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=numStrip ส่วนนำหน้าที่เล็กที่สุดที่มี 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