ง่ายsvn revert
พอสำหรับโปสเตอร์ดั้งเดิม อย่างไรก็ตามความเรียบง่ายsvn revert
จะไม่ทำในกรณีทั่วไปที่คุณ
- มีทั้งการแก้ไขที่คุณต้องการที่จะแบ่งปันและการแก้ไขที่คุณไม่ต้องการที่จะมีส่วนแบ่งในไฟล์เดียวกัน ,
- มีการเปลี่ยนแปลงในท้องถิ่นที่คุณสนใจยังคงอยู่ในการรักษาเพื่อประโยชน์ส่วนตัวของคุณเอง
@ ErichBSchulz ข้อเสนอแนะการใช้งานgit add -p
มีความสมเหตุสมผลมากและโดยทั่วไปจะมีความเหมาะสมมากกว่าในกรณีดังกล่าว คำตอบก็แค่ขาดรายละเอียดบางอย่าง สมมติว่าไดเรกทอรีปัจจุบันของคุณเป็นไดเรกทอรีที่คุณต้องการสร้างแพทช์แชร์ได้คุณสามารถทำสิ่งนี้:
ชำระเงินรุ่นที่เก่าแก่จากการโค่นล้มไปยังไดเรกทอรีอื่น (เลือกชื่อไดเรกทอรีที่ไม่มีอยู่ที่นี่โดยใช้ไดเรกทอรีย่อยTMP/
)
$ url=$(svn info . | awk '/^URL/ {print $2}')
$ svn checkout "$url" TMP
ใช้การชำระเงิน svn ดั้งเดิมนั้นเป็นพื้นฐานเริ่มต้นที่เก็บ git โดยไม่สนใจไดเรกทอรี. svn ส่งทุกอย่างในหัว svn ไปยังที่เก็บ git ชั่วคราวของคุณ
$ cd TMP
$ git init && echo ".svn/" > .gitignore
$ git add -A && git commit
$ cd ..
คัดลอกข้อมูลเมตาที่เก็บข้อมูล git ที่จัดเตรียมใหม่ไปยังไดเรกทอรีการทำงานดั้งเดิมของคุณ เนื่องจากไม่จำเป็นต้องมีไดเรกทอรีการชำระเงินการล้มล้างที่ถูกต้องคุณสามารถกำจัดมันได้ ไดเรกทอรีการทำงานของคุณอยู่ในขณะนี้ทั้งที่เก็บ git และ subversion:
$ mv TMP/.git .
$ rm -rf TMP/
ตอนนี้คุณสามารถใช้งานได้อย่างมีประสิทธิภาพและสะดวกสบายgit add -p
ในการเลือกสิ่งที่คุณต้องการแบ่งปันและโต้ตอบให้กับที่เก็บ git ของคุณ หากคุณต้องการเพิ่มไฟล์ลงในการคอมมิทให้ทำgit add <file-to-add>
ก่อนหน้านี้git commit
$ git add -p
<interactively select (and edit) the chunks you want to share>
$ git add ${the_list_of_files_not_in_yet_in_svn_you_want_to_add}
$ git commit
ใช้คอมมิชชันเตรียมแพทช์ที่คุณต้องการแชร์ เพื่อจุดประสงค์นี้คุณสามารถใช้git diff HEAD^..HEAD
หรือgit format-patch
(หลังสามารถใช้เพื่อเตรียมอีเมลที่จะส่งโดยตรงที่มีโปรแกรมแก้ไขหรือโปรแกรมแก้ไขหลายชุด):
$ git show -p HEAD > my-mighty-patch.patch
เพื่อกำจัดข้อมูล meta rm -rf .git/
คอมไพล์เพียงแค่ทำ หากคุณวางแผนที่จะแฮ็คกับไดเรกทอรีทำงานเดิมคุณสามารถใช้git
เพื่อจัดการการเปลี่ยนแปลงในท้องถิ่นของคุณต่อไป git svn
ในกรณีนี้คุณอาจจะได้รับประโยชน์จากการลงทุนของการเรียนรู้วิธีการใช้งาน
หมายเหตุ:หากคุณคุ้นเคยกับgit
สิ่งนี้เป็นเรื่องเล็กน้อยที่จะพูดโพล่งออกมา ไม่อย่างนั้นมันอาจดูยุ่งไปหน่อย คุณสามารถทำให้วิธีการทั่วไปโดยการเขียนสคริปต์ออกจากขั้นตอนเหล่านี้เพื่อใช้ "การกระทำแบบโต้ตอบ" หรือ "การสร้างแพทช์แบบโต้ตอบ" สำหรับ svn ที่สามารถนำมาใช้โดยไม่ต้องเข้าใจ git