ลูกค้าของฉันจะสามารถใช้โปรแกรมปะแก้ที่สร้างโดยgit diff
ไม่ติดตั้ง git ได้อย่างไร? ฉันพยายามใช้patch
คำสั่ง แต่จะขอให้แก้ไขชื่อไฟล์เสมอ
patch
ไม่สนับสนุนรูปแบบนี้
ลูกค้าของฉันจะสามารถใช้โปรแกรมปะแก้ที่สร้างโดยgit diff
ไม่ติดตั้ง git ได้อย่างไร? ฉันพยายามใช้patch
คำสั่ง แต่จะขอให้แก้ไขชื่อไฟล์เสมอ
patch
ไม่สนับสนุนรูปแบบนี้
คำตอบ:
git diff > patchfile
และ
patch -p1 < patchfile
ทำงานได้ แต่อย่างที่หลายคนสังเกตเห็นในความคิดเห็นและคำตอบอื่น ๆ แพทช์ไม่เข้าใจเพิ่มลบและเปลี่ยนชื่อ ไม่มีตัวเลือก แต่git apply patchfile
ถ้าคุณต้องการเพิ่มไฟล์จัดการลบและเปลี่ยนชื่อ
แก้ไขธันวาคม 2558
รุ่นล่าสุดของpatch
คำสั่ง (2.7 ได้รับการปล่อยตัวในเดือนกันยายน 2012) สนับสนุนคุณลักษณะส่วนใหญ่ของรูปแบบ "ต่าง --git" รวมทั้งเปลี่ยนชื่อและสำเนาสิทธิ์ในการเปลี่ยนแปลงและ diffs symlink ( แต่ยังไม่ได้ diffs binary) ( ปล่อยประกาศ )
ดังนั้นหากมีใครใช้รุ่นปัจจุบัน / ล่าสุดpatch
ไม่จำเป็นต้องใช้git
เพื่อให้สามารถใช้ diff เป็นแพทช์ได้
git diff > patchfile
แต่patch -p1 < patchfile
relative
ตัวเลือกเช่น:git diff --no-prefix --relative=my/relative/path > patchfile
patch -p1 < patchfile
ไม่จำเป็นต้องมีการติดตั้งคอมไพล์ คำสั่งแรกแสดงให้เห็นถึงคำสั่งสำหรับการสร้างความแตกต่างไม่ได้ใช้มัน
git diff from_branch > patchfile; git checkout from_branch; git patch -p1 < patchfile
หรือgit diff from_branch to_branch > patchfile; ...
ใช้
git apply patchfile
ถ้าเป็นไปได้.
patch -p1 < patchfile
มีผลข้างเคียงที่อาจเกิดขึ้น
git apply
จัดการกับไฟล์ที่เพิ่มลบและเปลี่ยนชื่อหากอธิบายในgit diff
รูปแบบซึ่งpatch
จะไม่ทำ สุดท้ายgit apply
คือรูปแบบ "ใช้ทั้งหมดหรือยกเลิกทั้งหมด" ซึ่งทุกอย่างถูกนำไปใช้หรือไม่มีอะไรในขณะที่โปรแกรมแก้ไขสามารถใช้ไฟล์แพทช์บางส่วนทำให้ไดเรกทอรีทำงานของคุณอยู่ในสถานะแปลก
git apply
เป็นวิธีที่ดีที่สุดที่จะทำ แต่คำถามนี้โดยเฉพาะถามวิธีการใช้แพทช์โดยไม่ต้องติดตั้ง Git
--dry-run --verbose
มีประโยชน์ในการพิจารณาว่ามีผลข้างเคียงอะไรบ้างถ้ามี (ใช้ patch v2.5.8)
git apply patchfile -
... คำตอบที่มีเหตุผลเพียงอย่างเดียว ... " - เกือบเป็นเรื่องที่น่าหัวเราะ ทุกครั้งที่ OpenSSL devs ส่งแพตช์ให้ฉันทดสอบ Git ไม่สามารถใช้มันได้ นั่นคือทุกครั้ง ฉันยังไม่เห็นว่าเครื่องมือโง่ ๆ ใช้โปรแกรมปะแก้
ฉันใช้
patch -p1 --merge < patchfile
วิธีนี้ความขัดแย้งอาจแก้ไขได้ตามปกติ