คำถามติดแท็ก patch

โปรแกรมแก้ไขคือไฟล์ที่ใช้ในการแก้ไขแพ็คเกจซอร์สโค้ดเช่นเพื่อแก้ไขข้อบกพร่องหรือเพิ่มคุณสมบัติ

2
การปรับปรุงไบนารีด้วย dd
ฉันได้อ่านคำพูดนี้ (ด้านล่าง) หลายครั้งล่าสุดที่นี่และฉันประหลาดใจอย่างต่อเนื่องว่าddจะใช้ในการแก้ไขสิ่งใดให้คอมไพเลอร์: ระบบ Unix ที่ฉันใช้ที่โรงเรียนเมื่อ 30 ปีก่อนมีข้อ จำกัด ในเรื่อง RAM และพื้นที่ดิสก์ โดยเฉพาะอย่างยิ่ง/usr/tmpระบบไฟล์มีขนาดเล็กมากซึ่งนำไปสู่ปัญหาเมื่อมีคนพยายามรวบรวมโปรแกรมขนาดใหญ่ แน่นอนว่านักเรียนไม่ควรเขียน "โปรแกรมขนาดใหญ่" อยู่ดี โปรแกรมขนาดใหญ่มักจะคัดลอกซอร์สโค้ดจาก "ที่ไหนสักแห่ง" พวกเราหลายคนคัดลอก/usr/bin/ccไปยัง/home/<myname>/ccและใช้ddเพื่อแก้ไขไบนารีเพื่อใช้/tmpแทน/usr/tmpซึ่งใหญ่กว่า แน่นอนว่าสิ่งนี้ทำให้ปัญหาแย่ลง - พื้นที่ดิสก์ที่ครอบครองโดยสำเนาเหล่านี้มีความสำคัญในปัจจุบันและ/tmpเต็มไปด้วยสิ่งนี้เป็นประจำทำให้ผู้ใช้รายอื่นไม่สามารถแก้ไขไฟล์ได้ หลังจากที่พวกเขาพบว่าเกิดอะไรขึ้นผู้ดูแลระบบก็ทำchmod go-r /bin/* /usr/bin/* ซึ่ง "แก้ไข" ปัญหาและลบสำเนาของคอมไพเลอร์ C ทั้งหมดของเรา (เหมืองเน้น) ddคนหน้าไม่พูดอะไรเกี่ยวกับปะและไม่คิดว่ามันอาจจะเป็นใหม่วัตถุประสงค์ที่จะทำต่อไปนี้ ไบนารีสามารถได้รับการแก้ไขด้วยddหรือไม่ มีความสำคัญทางประวัติศาสตร์ในเรื่องนี้หรือไม่?
32 dd  history  patch 

1
ฉันจะใช้โปรแกรมแก้ไข -p0 จากไดเรกทอรีทำงานได้อย่างไร
ฉันมีแพทช์ที่มีเส้นทางที่แน่นอนที่ฉันต้องการใช้ เช่นสองสามบรรทัดแรกมีดังนี้ --- /usr/share/apps/plasma/packages/org.kde.pager/contents/ui/main.qml 2014-10-10 18:47:23.000000000 +1100 +++ /usr/share/apps/plasma/packages/org.kde.pager/contents/ui/main.qml.mod 2014-11-11 09:44:17.786200477 +1100 อย่างไรก็ตามมันล้มเหลวเว้นแต่ฉันอยู่ในไดเรกทอรีราก ~$ cd ~$ sudo patch -i /tmp/fix_kde_icons.patch -p0 Ignoring potentially dangerous file name /usr/share/apps/plasma/packages/org.kde.pager/contents/ui/main.qml Ignoring potentially dangerous file name /usr/share/apps/plasma/packages/org.kde.pager/contents/ui/main.qml.mod can't find file to patch at input line 3 Perhaps you used the wrong -p or --strip …
26 patch 

3
วิธีแก้ไขข้อความ“ Hunk # 1 FAILED ที่ 1 (สิ้นสุดบรรทัดที่แตกต่างกัน)”
ฉันพยายามสร้างแพตช์ด้วยคำสั่ง git diff sourcefile >/var/lib/laymab/overlay/category/ebuild/files/thepatch.patch เมื่อฉันใช้แพทช์มันให้ฉัน $ patch -v GNU patch 2.7.5 $ /usr/bin/patch -p1 </var/lib/laymab/overlay/category/ebuild/files/thepatch.patch patching file sourcefile Hunk #1 FAILED at 1 (different line endings). Hunk #2 FAILED at 23 (different line endings). Hunk #3 FAILED at 47 (different line endings). Hunk #4 FAILED at 65 (different line …
22 git  diff  newlines  patch 


2
จุดประสงค์ของแพตช์ของเคอร์เนล linux คืออะไร?
สำหรับ Linux kernel แต่ละรุ่นจะมีไฟล์แพตช์ให้ดาวน์โหลด ตัวอย่างเช่นlinux-3.12.22มีpatch-3.12.22 ที่สอดคล้องกัน จุดประสงค์ของการแก้ไขคืออะไร? หากต้องการแก้ไขเคอร์เนลที่สอดคล้องกันเสมอก่อนที่จะรวบรวมหรือนำเวอร์ชันเคอร์เนลรุ่นเก่ามาอัพเดทกับเคอร์เนลที่แพทช์ตรงกัน (3.12.22 ในกรณีนี้)

3
แสดงเฉพาะ hunks ที่เกี่ยวข้องของ diff / patch ตาม regexp
git log -G<regex> -pเป็นเครื่องมือที่ยอดเยี่ยมในการค้นหาประวัติของ codebase สำหรับการเปลี่ยนแปลงที่ตรงกับรูปแบบที่ระบุ อย่างไรก็ตามมันอาจเป็นเรื่องยากที่จะค้นหาก้อนใหญ่ที่เกี่ยวข้องในเอาท์พุท diff / patch ในทะเลของนักล่าที่ไม่เกี่ยวข้องส่วนใหญ่ แน่นอนว่าเป็นไปได้ที่จะค้นหาผลลัพธ์ของgit logสตริง / regex ดั้งเดิม แต่ก็มีน้อยที่จะลดเสียงรบกวนที่มองเห็นและการเบี่ยงเบนของการเปลี่ยนแปลงที่ไม่เกี่ยวข้องจำนวนมาก อ่านต่อgit logไปฉันเห็นว่ามันมี--pickaxe-allซึ่งตรงข้ามกับสิ่งที่ฉันต้องการ: มันขยายเอาต์พุต (ไปยังชุดการเปลี่ยนแปลงทั้งหมด) ในขณะที่ฉันต้องการ จำกัด (เฉพาะก้อนใหญ่) โดยพื้นฐานแล้วฉันกำลังมองหาวิธี "แยกแยะ" อย่างชาญฉลาด "ในการแยก diff / patch ลงใน hunks แต่ละอันแล้วทำการค้นหากับแต่ละก้อนใหญ่ (กำหนดเป้าหมายเพียงแค่บรรทัดที่เปลี่ยนไป) ทิ้งกลุ่ม hunks ที่ไม่ตรงกัน ที่ทำ มีเครื่องมือเช่นที่ฉันอธิบายอยู่หรือไม่? มีวิธีการที่ดีกว่าในการได้รับการจับคู่หรือได้รับผลกระทบหรือไม่? งานวิจัยเริ่มแรกที่ฉันทำ ... หากเป็นไปได้ที่จะgrepส่งออก diff / patch และทำให้ค่าตัวเลือกบริบทเป็นแบบไดนามิก - พูดผ่าน …
20 git  diff  patch 


5
เหตุใดจึงต้องใช้ diff / patch เมื่อง่ายต่อการใช้ cp
diff -u file1.txt file2.txt > patchfile สร้างไฟล์แพตช์ซึ่งประกอบด้วยคำสั่งสำหรับpatchการแปลง file1.txt ให้เหมือนกับ file2.txt ไม่สามารถใช้cpคำสั่งแทนได้หรือไม่ ฉันสามารถจินตนาการว่านี่จะเป็นประโยชน์เมื่อไฟล์มีขนาดใหญ่เกินไปและต้องถูกถ่ายโอนผ่านเครือข่ายซึ่งวิธีการนี้อาจช่วยประหยัดแบนด์วิดท์ มีวิธีอื่นในการใช้ diff / patch ซึ่งจะเป็นประโยชน์ในสถานการณ์อื่น ๆ หรือไม่?
19 shell  cp  diff  patch 

7
วิธีใช้ patch และ diff เพื่อรวมสองไฟล์และแก้ไขข้อขัดแย้งโดยอัตโนมัติ
ฉันได้อ่านเกี่ยวกับ diff และ patch แต่ฉันไม่สามารถหาวิธีใช้สิ่งที่ฉันต้องการ ฉันเดาว่ามันค่อนข้างง่ายดังนั้นเพื่อแสดงปัญหาของฉันให้ใช้สองไฟล์นี้: a.xml <resources> <color name="same_in_b">#AAABBB</color> <color name="not_in_b">#AAAAAA</color> <color name="in_b_but_different_val">#AAAAAA</color> <color name="not_in_b_too">#AAAAAA</color> </resources> b.xml <resources> <color name="same_in_b">#AAABBB</color> <color name="in_b_but_different_val">#BBBBBB</color> <color name="not_in_a">#AAAAAA</color> </resources> ฉันต้องการมีเอาต์พุตซึ่งมีลักษณะเช่นนี้ (ลำดับไม่สำคัญ): <resources> <color name="same_in_b">#AAABBB</color> <color name="not_in_b">#AAAAAA</color> <color name="in_b_but_different_val">#BBBBBB</color> <color name="not_in_b_too">#AAAAAA</color> <color name="not_in_a">#AAAAAA</color> </resources> การผสานควรมีบรรทัดทั้งหมดตามกฎง่าย ๆ นี้: บรรทัดใด ๆ ที่อยู่ในไฟล์เดียวเท่านั้น หากบรรทัดมีแท็กชื่อเดียวกัน แต่มีค่าต่างกันให้นำค่าจากวินาที ฉันต้องการใช้งานนี้ในสคริปต์ทุบตีดังนั้นจึงไม่จำเป็นต้องทำโดยใช้ diff …


4
ฉันจะรับชุดแพทช์เคอร์เนล linux จากรายการส่งจดหมายได้อย่างไร
ฉันไม่สมัครสมาชิกรายชื่อส่งเมล linux-kernel แต่ฉันต้องการรับชุดข้อมูลแก้ไขที่โพสต์เมื่อไม่กี่สัปดาห์ก่อนและนำไปใช้กับเคอร์เนลของฉันเพื่อทดสอบ ฉันคุ้นเคยกับการแพตช์อาคารและอื่น ๆ คำถามของฉันคือวิธีที่ดีที่สุดในการรับสำเนาชุดแพทช์นี้ มันไม่ได้ใช้กับ repo Git ใด ๆ ที่ฉันรู้มันเพิ่งถูกโพสต์ไปยังรายชื่อผู้รับจดหมายเพื่อการสนทนา ฉันพบไซต์จำนวนมากที่เก็บรายชื่อการส่งเมล linux-kernel และฉันสามารถดูชุดของแพทช์ที่นั่น แต่ไม่มีไซต์ใด ๆ ที่มีวิธีการใด ๆ (ที่ฉันสามารถหาได้) ในการดาวน์โหลดอีเมลดิบดังนั้นฉันจึงสามารถใช้ " "หรือ" แพทช์ "หรืออะไรก็ตาม เพียงคัดลอก / วางเนื้อหาจากเว็บเบราว์เซอร์ของฉันดูเหมือนว่าจะไม่ประสบความสำเร็จมากเนื่องจากความแตกต่างของช่องว่าง ฯลฯ ผู้คนจัดการสิ่งนี้ได้อย่างไร

2
นี่เป็นวิธีที่ดีในการสร้างแพตช์หรือไม่?
ฉันต้องการสร้างแพทช์จากgccสาขาที่เฉพาะเจาะจงเปรียบเทียบกับการวางจำหน่ายอย่างเป็นทางการ ดังนั้นเมื่อฉันนำ tarball ออกจากการวางจำหน่ายที่เสถียรฉันสามารถใช้ตัวแก้ไขและรับสิ่งที่เทียบเท่าในสาขานั้น นี่เป็นครั้งแรกที่ฉันต้องสร้างแพตช์ดังนั้นมันเป็นครั้งแรกที่ฉันทำสิ่งนี้และสิ่งที่ฉันกังวลหลักคือการหาตัวเลือกและการแยกวิเคราะห์ที่ถูกต้องเนื่องจากเรากำลังพูดถึงซอฟต์แวร์ที่สำคัญอย่างยิ่ง diff -crB GccStable GccGit > /tmp/fromStabletoBranch.patch นี่เป็นวิธีที่ดีที่สุดและเพียงพอหรือไม่
15 diff  patch 


2
วิธีที่จะทำให้แพทช์ไม่สนใจ hunks ที่ใช้ไปแล้ว
ฉันมีไฟล์ตัวแก้ไขที่มีขนาดใหญ่มากซึ่งฉันพยายามจะนำไปใช้กับรหัสของฉัน ปัญหาคือการเปลี่ยนแปลงบางอย่างในโปรแกรมแก้ไขของฉันมีอยู่แล้วในรหัส มีวิธีในการทำให้โปรแกรมปะแก้ละเว้นการเปลี่ยนแปลงที่มีการใช้งานไปแล้วอย่างสง่างามหรือไม่? -Nตัวเลือกที่ไม่ได้ทำสิ่งที่ฉันต้องการ หากพบก้อนใหญ่ที่ใช้ไปแล้วมันจะสร้างไฟล์ที่ปฏิเสธและจะไม่ใช้ hunks ใด ๆ เพิ่มเติมกับไฟล์นั้น ฉันต้องการที่จะไม่สนใจก้อนใหญ่นั้นและใช้ส่วนที่เหลือของแพทช์ต่อไป ครั้งเดียวที่ฉันต้องการให้มันสร้างไฟล์. rej คือถ้าไม่สามารถใช้ก้อนใหญ่และดูเหมือนจะไม่ได้ถูกนำไปใช้แล้ว มีวิธีทำเช่นนี้หรือไม่?
14 patch 

2
ข้อผิดพลาด“ แพทช์ผิดปกติ” ในขณะที่ใช้ดิฟกับแหล่งข้อมูลด้วยแพทช์
ฉันต้องการใช้ชุดข้อมูลแก้ไขนี้ดังนั้นฉันจึงคัดลอกรหัสเริ่มต้นที่ "ดัชนี: src / options.h" และลงท้ายด้วย "+ @ รายการ" และใส่ลงในไฟล์ใหม่ที่สร้างในwgetโฟลเดอร์ซอร์สโค้ดของ จากนั้นฉันก็: $ patch -p0 < name_of_patch (Patch is indented 1 space.) patching file src/options.h patch: **** malformed patch at line 6: char **excludes; /* List of excluded FTP directories. */ ฉันควรจะใช้สิ่งนี้อย่างไร นี่คือเนื้อหาของไฟล์ที่ฉันสร้าง: Index: src/options.h =================================================================== --- src/options.h (revision 2276) +++ …
10 wget  patch 

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.