ฉันต้องการสิ่งนี้เช่นกันและด้วยความช่วยเหลือจากคำตอบของ Bombe + ที่เล่นซอไปรอบ ๆ ฉันทำให้มันทำงานได้ นี่คือสูตรของ:
นำเข้า Git -> การโค่นล้ม
1. cd /path/to/git/localrepo
2. svn mkdir --parents protocol:///path/to/repo/PROJECT/trunk -m "Importing git repo"
3. git svn init protocol:///path/to/repo/PROJECT -s
4. git svn fetch
5. git rebase origin/trunk
5.1. git status
5.2. git add (conflicted-files)
5.3. git rebase --continue
5.4. (repeat 5.1.)
6. git svn dcommit
หลังจาก # 3 คุณจะได้รับข้อความที่เป็นความลับดังนี้:
ใช้ระดับที่สูงขึ้นของ URL: protocol:///path/to/repo/PROJECT => protocol:///path/to/repo
เพียงแค่เพิกเฉย
เมื่อคุณรัน # 5 คุณอาจได้รับข้อขัดแย้ง แก้ไขไฟล์เหล่านี้ด้วยการเพิ่มไฟล์ที่มีสถานะ "unmerged" และดำเนินการ rebase ต่อ ในที่สุดคุณจะทำ; แล้วซิงค์กลับไปยังพื้นที่เก็บข้อมูล SVN dcommit
โดยใช้ นั่นคือทั้งหมดที่
การทำให้ที่เก็บข้อมูลตรงกัน
ตอนนี้คุณสามารถซิงโครไนซ์จาก SVN ถึง Git โดยใช้คำสั่งต่อไปนี้:
git svn fetch
git rebase trunk
และในการซิงโครไนซ์จาก Git ไปยัง SVN ให้ใช้:
git svn dcommit
หมายเหตุสุดท้าย
คุณอาจต้องการลองใช้กับสำเนาโลคัลก่อนใช้กับที่เก็บแบบสด คุณสามารถทำสำเนาของที่เก็บ Git ของคุณไปยังสถานที่ชั่วคราว ใช้เพียงcp -r
เพราะข้อมูลทั้งหมดอยู่ในพื้นที่เก็บข้อมูลของตัวเอง จากนั้นคุณสามารถตั้งค่าที่เก็บไฟล์ทดสอบโดยใช้:
svnadmin create /home/name/tmp/test-repo
และตรวจสอบสำเนาทำงานโดยใช้:
svn co file:///home/name/tmp/test-repo svn-working-copy
ที่จะช่วยให้คุณสามารถเล่นกับสิ่งต่าง ๆ ก่อนที่จะทำการเปลี่ยนแปลงที่ยั่งยืน
ภาคผนวก: ถ้าคุณทำผิดพลาด git svn init
หากคุณเรียกใช้git svn init
URL ผิดโดยไม่ตั้งใจและคุณไม่ฉลาดพอที่จะสำรองข้อมูลงานของคุณ (ไม่ต้องถาม ... ) คุณจะไม่สามารถเรียกใช้คำสั่งเดิมอีกครั้งได้ อย่างไรก็ตามคุณสามารถยกเลิกการเปลี่ยนแปลงได้โดยการออก:
rm -rf .git/svn
edit .git/config
และลบส่วนใน[svn-remote "svn"]
ส่วน
จากนั้นคุณสามารถเรียกใช้git svn init
ใหม่ได้