การนำเข้า SVN Repo ไปยัง repo Git ที่มีอยู่เป็นสาขา

ขณะนี้ฉันมีโปรเจ็กต์บนโค้ด Google ที่ฉันต้องการรวมเข้ากับโปรเจ็กต์บน Github

ปัญหาคือโปรเจ็กต์ SVN เป็นเพียงโฟลเดอร์ของโปรเจ็กต์ขนาดใหญ่กว่าบน GitHub ดังนั้นฉันไม่คิดว่าจะสามารถใช้ git-svn สำหรับสิ่งนี้ได้

ฉันคิดว่าฉันสามารถใช้ git svn เพื่อโคลนโปรเจ็กต์ได้ แต่ฉันก็ไม่แน่ใจว่าจะกราฟต์โปรเจ็กต์ svn ลงบนโปรเจ็กต์ git ที่มีอยู่อย่างถูกต้องได้อย่างไร

ผลลัพธ์ที่ต้องการคือการนำประวัติ SVN เข้าสู่สาขา Git (ไม่ใช่ต่อกิ่งเข้ากับต้นแบบ)

ความสามารถในการกลับไปใช้ svn นั้นไม่จำเป็นจริงๆ (ถ้าช่วยได้)

แก้ไขแล้ว

ฉันลงเอยด้วยการใช้คำแนะนำของ just_doug แต่มีการแก้ไขเล็กน้อย:

1: ฉันใช้คำแนะนำจาก http://ivanz.com/2009/01/15/selective-import-of-svn-branches-into-a-gitgit-svn-repository/ เพื่อเพิ่ม googlecode เป็นการอ้างอิงระยะไกล

2: ฉันสร้างสาขาใหม่จากต้นแบบสำหรับสาขาระยะไกลที่ฉันต้องการ

3: ฉันใช้

git merge -s ของเรา --no-commit googlecode-remote

เพื่อรวมทั้งสองเข้าด้วยกัน

4: จากนั้นฉันก็ใช้

git read-tree --prefix=folder1/folder2/ -u googlecode-remote

เพื่ออ่านในประวัติการผสานและรีบูตไปยังโฟลเดอร์ย่อยที่ต้องการ

หวังว่านี่จะช่วยใครบางคนในสถานการณ์ที่คล้ายกัน ;)


person Alex B.    schedule 31.03.2011    source แหล่งที่มา


คำตอบ (1)


ฉันยังไม่เคยใช้มาก่อน แต่ดูเหมือนว่าคุณต้องการ กลยุทธ์การรวมทรีย่อย บทความนี้มีรายละเอียดเพิ่มเติมเกี่ยวกับวิธีการใช้งาน

โดยพื้นฐานแล้ว คุณเพิ่มที่เก็บ SVN เป็นรีโมต จากนั้นใช้คำสั่ง git read-tree เพื่อ "กราฟต์" ให้เป็นไดเร็กทอรีย่อยของที่เก็บ git ล้วนๆ ของคุณ ขึ้นอยู่กับว่าคุณต้องการให้ประวัติปรากฏอย่างไร คุณสามารถทำ git merge -s subtree เพื่อรวมเข้ากับสาขา pure-git ของคุณ (คอมมิต git-svn ที่สงวนไว้) หรือคุณสามารถทำตามขั้นตอนในลิงก์ที่สองและเพิ่มแฟล็ก --squash และ --no-commit และ ให้การผสานแสดงเป็นการกระทำเดียวในสาขา pure-git

คำแนะนำจะถือว่ารีโมตนั้นเป็น repo git เช่นกัน หาก repo ในเครื่องถูกสร้างขึ้นด้วย git แทนที่จะเป็น git-svn ก็ไม่แน่ใจว่าจะเล่นได้ดีแค่ไหน มันค่อนข้างจะยุ่งยาก แต่ต่อไปนี้เป็นสคริปต์บางส่วนสำหรับการสร้างพื้นที่เก็บข้อมูลระดับกลางที่เพียงแค่มิเรอร์ repo SVN ใน git ด้วยวิธีนี้ คุณสามารถสร้างมิเรอร์ git-svn ของ svn repo และเพิ่มสิ่งนี้เป็นรีโมทได้ และคำแนะนำข้างต้นควรใช้งานได้ตามที่อธิบายไว้

person just_doug    schedule 31.03.2011