เป็นไปได้ไหมที่จะpatch
ไม่บอกให้สร้าง.orig
และ.rej
ไฟล์? ฉันพบว่ามันน่ารำคาญอย่างยิ่งที่โปรแกรมปะแก้สร้าง
เป็นไปได้ไหมที่จะpatch
ไม่บอกให้สร้าง.orig
และ.rej
ไฟล์? ฉันพบว่ามันน่ารำคาญอย่างยิ่งที่โปรแกรมปะแก้สร้าง
คำตอบ:
หากคุณไม่ได้ให้ตัวเลือกpatch
อื่นใดนอกจาก-pN
จะสร้างไฟล์เหล่านั้นเมื่อโปรแกรมแก้ไขไม่สามารถใช้งานได้อย่างสมบูรณ์
ดังนั้นหนึ่งทางเลือกคือการหยุดการสร้าง (หรือยอมรับ) แพทช์ที่ไม่ดี :)
ย้อนกลับไปในโลกแห่งความจริงนี่เป็นฟีเจอร์ เมื่อpatch(1)
ล้มเหลวในการใช้ส่วนของโปรแกรมแก้ไขกับไฟล์ต้นฉบับมันจะบันทึกไฟล์ต้นฉบับชั่วคราวที่คัดลอกออกมาอย่างถาวรเป็น*.orig
ทิ้งส่วนที่ถูกปฏิเสธไป*.rej
แล้วและยังคงพยายามใช้ส่วนของโปรแกรมแก้ไขต่อไป แนวคิดคือคุณสามารถเปิด*.rej
ไฟล์และทำกระบวนการแก้ไขด้วยตนเองได้โดยการคัดลอกบิตและชิ้นส่วนไปยังไฟล์ที่ถูกแก้ไข *.orig
ไฟล์ดังกล่าวยังมีประโยชน์เมื่อกระบวนการแพตช์ทำลายบางสิ่งโดยไม่ตั้งใจและคุณต้องอ้างถึงเวอร์ชันดั้งเดิมเพื่อแก้ไข
ฉันไม่ได้แก้ไขแพตช์ที่ไม่ดีพร้อมข้อความจาก*.rej
และ*.orig
ไฟล์ แต่มันก็ดีถ้ามีพวกมันในกรณีที่ฉันต้องการมัน
เมื่อฉันแก้ไขแพตช์ที่ไม่ดีฉันจะเรียกใช้สคริปต์ต่อไปนี้ที่รูทโปรเจ็กต์เพื่อล้างสิ่งต่าง ๆ อย่างรวดเร็ว:
#!/bin/bash
find . '(' \
-name \*-baseline -o \
-name \*-merge -o \
-name \*-original -o \
-name \*.orig -o \
-name \*.rej \
')' -delete
ฉันเรียกมันว่าcleanup-after-bad-patch
เพราะชื่อยาวบางส่วนรับประกันว่าจะทำงานโดยไม่ได้ตั้งใจเพราะมันสามารถลบไฟล์ที่คุณยังต้องการได้ ตามจริงแล้วฉันมักจะรันมันโดยพิมพ์clean
TabEnterว่ามันเพียงพอที่จะค้นหาสคริปต์นี้ในPATH
เครื่องพัฒนาของฉัน
รูปแบบเพิ่มเติมที่ตรวจสอบมีไว้สำหรับไฟล์ที่ส่งออกโดยระบบควบคุมเวอร์ชันที่ฉันเลือกเมื่อพบปัญหาเดียวกันระหว่างการดำเนินการผสาน คุณอาจต้องการปรับแต่งสำหรับเครื่องมือVCS / SCM ของคุณ
หากต้องการบอกให้ patch ไม่ให้ทำการสำรองข้อมูลเพียงแค่ละเว้น-b
และ--backup-...
ตัวเลือกใด ๆ
เพื่อแนะนำให้ไม่สร้างตัวเลือก.rej
เพิ่มไฟล์ลง-r -
ในคำสั่ง
GNU patch 2.6
บน mac อาจลอง-r /dev/null
--no-backup-if-mismatch
ตัวเลือกที่จะหลีกเลี่ยง ".orig" ไฟล์
คุณอาจต้องการลองใช้--merge
ตัวเลือกซึ่งสร้างข้อขัดแย้งในไฟล์
ในทุกกรณีคุณควรมีวิธีที่จะกลับสู่สถานะที่ดีได้อย่างรวดเร็วหากการรวมเข้าครอบงำ
ผมติดอยู่กับแพทช์ v2.5.4 ที่ทำให้เกิดการสร้างปฏิเสธชื่อไฟล์-r -
-
ฉันพบว่า--reject-file=
เช่นค่าว่างทำให้แพทช์ล้มเหลวด้วยรหัสออก2
หากพยายามเขียนไฟล์ปฏิเสธ หากไม่มีการปฏิเสธก็ใช้งานได้ตามที่คาดไว้ แม้ว่าจะไม่ใช่วิธีแก้ปัญหาที่สมบูรณ์สำหรับแพทช์รุ่นเก่า แต่ในบางกรณีอาจยอมรับหรือต้องการได้
สิ่งที่ดีที่สุดที่ฉันสามารถทำได้ (ใช้วิธีการกวาดสิ่งสกปรกใต้พรม) คือ-r <tmpfile>
:
# patch -r /tmp/deleteme.rej -i patchfile filetobepatched
ตั้งแต่ใน v2.5.8 -r -
จริง ๆ แล้วสร้าง-
ไฟล์
patch -p1 -B / dev / null -r - <file.patch
-B
แฟล็กไม่ได้ส่ง*.orig
เอาต์พุตไป/dev/null
ตามที่ปรากฏจากคำสั่งของคุณ /dev/nullfoo.cpp
มันก็เกิดขึ้นที่ผู้ใช้ปกติไม่สามารถเขียนไฟล์ที่เรียกว่าสิ่งที่ต้องการ หากคุณทำสิ่งนี้ในฐานะรูทคุณจะได้รับขยะใน/dev
ต้นไม้แทน ประการที่สอง-r -
ไม่ระงับ*.rej
ไฟล์ มันก็ดูเหมือนจะทำเพราะข้อผิดพลาดเนื่องจากการปลอม-B
ธงหยุดมันจากการแสดงให้คุณเห็นสิ่งที่มันจริงๆจะทำโดยไม่ต้อง-B
ซึ่งเป็นสร้างไฟล์ชื่อ-
ในไดเรกทอรีปัจจุบัน
man patch
: "-r ใส่การคัดลอกลงใน rejectfile แทนไฟล์. rej ที่เป็นค่าเริ่มต้นเมื่อ rejectfile คือ - ให้ยกเลิกการปฏิเสธ"