ลูกค้าของฉันจะสามารถใช้โปรแกรมปะแก้ที่สร้างโดย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
วิธีนี้ความขัดแย้งอาจแก้ไขได้ตามปกติ