จะทำอย่างไรกับประวัติ svn ขนาดใหญ่เมื่อย้ายไปคอมไพล์?


23

แก้ไข: ไม่เหมือนคำถามที่คล้ายกันเช่นการย้าย repo SVN หลาย GB ไปยัง Git หรือ /programming/540535/managing-large-binary-files-with-git สถานการณ์ของฉันไม่เกี่ยวข้องกับโครงการย่อยหลายโครงการ สามารถแปลงเป็น submoduels คอมไพล์ได้อย่างง่ายดายหรือไฟล์ไบนารี่ขนาดใหญ่สองสามตัวที่เหมาะสำหรับ git-annex มันเป็นพื้นที่เก็บข้อมูลเดียวที่ไบนารีเป็นชุดทดสอบที่คู่กับรหัสแหล่งที่มาหลักของการแก้ไขเดียวกันแน่นเหมือนว่าพวกเขาเป็นสินทรัพย์เวลารวบรวมเช่นกราฟิก

ฉันกำลังตรวจสอบการสลับพื้นที่เก็บข้อมูลขนาดกลาง / ขนาดใหญ่ (ผู้ใช้ 50 ราย, รุ่น 60k, ประวัติ 80GB, สำเนาทำงาน 2Gb) จาก svn เมื่อจำนวนผู้ใช้เพิ่มขึ้นมีจำนวนมากในลำตัวและคุณลักษณะมักจะแพร่กระจายออกไปในหลายคอมมิททำให้การตรวจสอบโค้ดทำได้ยาก นอกจากนี้หากไม่มีการแตกแขนงออกมาจะไม่มีวิธี "รหัส" ที่ไม่ดีออกความคิดเห็นสามารถทำได้หลังจากมีการผูกมัดลำต้นเท่านั้น ฉันกำลังตรวจสอบทางเลือก ฉันหวังว่าเราสามารถย้ายไปคอมไพล์ แต่ฉันมีปัญหาบางอย่าง

ปัญหาของการซื้อคืนในปัจจุบันจนถึงขนาดของคอมไพล์คือขนาด มี cruft เก่าจำนวนมากอยู่ในนั้นและการทำความสะอาดด้วย - ฟิลเตอร์สาขาเมื่อแปลงเป็นคอมไพล์สามารถลดขนาดลงตามลำดับความสำคัญประมาณ 5-10GB นี่ยังใหญ่เกินไป เหตุผลที่ดีที่สุดสำหรับขนาดพื้นที่เก็บข้อมูลขนาดใหญ่คือมีเอกสารไบนารีจำนวนมากที่ถูกป้อนเข้าสู่การทดสอบ ไฟล์เหล่านี้แตกต่างกันระหว่าง. 5mb และ 30mb และมีหลายร้อยไฟล์ พวกเขายังมีการเปลี่ยนแปลงค่อนข้างมาก ฉันดูที่ submodules, git-annex และอื่น ๆ , แต่การทดสอบใน submodule นั้นรู้สึกผิด, เช่นเดียวกับการมีภาคผนวกสำหรับไฟล์จำนวนมากที่คุณต้องการประวัติเต็ม.

ดังนั้นลักษณะการกระจายของคอมไพล์เป็นจริงสิ่งที่ปิดกั้นฉันจากการใช้มัน ฉันไม่สนใจเรื่องการกระจายฉันแค่ต้องการฟีเจอร์การรวมสาขาและการผสานที่ทรงพลัง อย่างที่ฉันคิดว่า 99.9% ของผู้ใช้คอมไพล์ทำเราจะใช้พื้นที่เก็บข้อมูลส่วนกลางที่มีความสุข

ฉันไม่แน่ใจว่าฉันเข้าใจว่าเหตุใดผู้ใช้แต่ละคนจึงต้องมีประวัติในท้องถิ่นแบบเต็มเมื่อใช้ git? หากเวิร์กโฟลว์ไม่ได้รับการกระจายอำนาจข้อมูลนั้นจะทำอะไรในดิสก์ของผู้ใช้ ฉันรู้ว่าใน git รุ่นล่าสุดคุณสามารถใช้โคลนตื้นที่มีประวัติล่าสุดเท่านั้น คำถามของฉันคือ: เป็นไปได้หรือไม่ที่จะทำเช่นนี้เป็นโหมดมาตรฐานของการดำเนินงานสำหรับทั้งทีม? สามารถตั้งค่า git ให้ตื้นได้ตลอดเวลาเพื่อให้คุณมีประวัติแบบเต็มเท่านั้นจากส่วนกลาง แต่ผู้ใช้โดยค่าเริ่มต้นมีประวัติ 1000 revs เท่านั้น? ตัวเลือกของหลักสูตรนั้นคือเพียงแค่แปลง 1,000 revs เป็น git และเก็บ svn repo ไว้สำหรับโบราณคดี ในสถานการณ์สมมตินั้นเราจะพบปัญหาเดียวกันอีกครั้งหลังจากการตรวจสอบเอกสารการทดสอบหลายพันครั้งต่อไป

  • เป็นดีปฏิบัติที่ดีที่สุดสำหรับการใช้คอมไพล์ด้วย Repos ขนาดใหญ่ที่มีไฟล์ไบนารีหลายอย่างที่คุณว่าไม่ต้องการประวัติศาสตร์? แนวทางปฏิบัติและแบบฝึกหัดที่ดีที่สุดส่วนใหญ่ดูเหมือนจะหลีกเลี่ยงกรณีนี้ พวกเขาแก้ปัญหาของไบนารีขนาดใหญ่ไม่กี่หรือเสนอทิ้งไบนารีทั้งหมด
  • การโคลนแบบตื้นสามารถใช้งานได้ในโหมดปกติหรือเป็น "แฮ็ค" หรือไม่?
  • สามารถใช้ submodules สำหรับรหัสที่คุณมีการอ้างอิงที่รัดกุมระหว่างการแก้ไขแหล่งที่มาหลักและการแก้ไข submodule (เช่นในการรวบรวมไบนารี่เวลาอ้างอิงหรือชุดทดสอบหน่วย)?
  • "ใหญ่เกินไป" สำหรับพื้นที่เก็บข้อมูลคอมไพล์ในสถานที่มีขนาดเท่าใด เราควรหลีกเลี่ยงการสลับถ้าเราสามารถทำให้มันลดลงถึง 4GB? 2GB?

เป็นไปได้ที่ซ้ำกันของการย้าย repo SVN หลาย GB ไปยัง Git
gnat

ฉันค้นหาข้อมูลมากมายจากนี้และไม่พบสิ่งใดที่ตอบคำถามของฉัน ในคำถามที่เชื่อมโยง workaounrds (submodules, ภาคผนวก ฯลฯ ) จะทำงานได้ดีกว่าในสถานการณ์ของฉัน
Anders Forsgren


Perforce อาจเป็นตัวเลือกที่ดีกว่าคอมไพล์เนื่องจากมันถูกออกแบบมาเพื่อรับมือกับไฟล์ไบนารีขนาดใหญ่จำนวนมากซึ่งผู้พัฒนาเกมจำนวนมากใช้ Plasticscm นั้นก็ควรค่าแก่การดูด้วยเช่นกัน
เอียน

หลีกเลี่ยงการใช้ซับเซ็ต Git ถ้าทำได้เพราะมันซับซ้อนระบบ build (ซึ่งซับซ้อนในกรณีของคุณ)
IgorGanapolsky

คำตอบ:


10

ว้าวนั่นเป็นคำถามที่ยาวนาน (และเป็นปัญหาที่ซับซ้อน) ฉันจะลองทำดู

ฉันไม่แน่ใจว่าฉันเข้าใจว่าเหตุใดผู้ใช้แต่ละคนจึงต้องมีประวัติในท้องถิ่นแบบเต็มเมื่อใช้ git?

นี่คือการตัดสินใจออกแบบส่วนกลางด้วยคอมไพล์ ด้วยเหตุผลที่แน่นอนคุณจะต้องถามผู้เขียน (Linus Torvalds) แต่เท่าที่ฉันทราบเหตุผลหลักคือความเร็ว: การมีทุกอย่างในตัวเครื่อง (บนดิสก์ที่เร็วหรือแคชใน RAM) ทำให้การดำเนินการเกี่ยวกับประวัติศาสตร์เร็วขึ้นมาก โดยหลีกเลี่ยงการเข้าถึงเครือข่าย

เหตุผลที่ดีที่สุดสำหรับขนาดพื้นที่เก็บข้อมูลขนาดใหญ่คือมีเอกสารไบนารีจำนวนมากที่ถูกป้อนเข้าสู่การทดสอบ ไฟล์เหล่านี้แตกต่างกันระหว่าง. 5mb และ 30mb และมีหลายร้อยไฟล์ พวกเขายังมีการเปลี่ยนแปลงค่อนข้างมาก

นั่นคือจุดที่ฉันจะคิดก่อน การมีไฟล์ไบนารีที่เปลี่ยนแปลงอยู่ตลอดเวลาจำนวนมากในการควบคุมแหล่งข้อมูลดูเหมือนว่าเป็นปัญหาสำหรับฉัน คุณใช้วิธีการอื่นไม่ได้หรือ ไอเดีย:

  • ไม่เหมือนกับซอร์สโค้ดไฟล์ไบนารีขนาด 3 MB อาจไม่เขียนด้วยมือ หากเครื่องมือ / กระบวนการสร้างขึ้นมาให้พิจารณาการรวมเข้ากับงานสร้างของคุณแทนที่จะเก็บข้อมูล

  • หากไม่เป็นประโยชน์จริง ๆ แล้วไฟล์ไบนารีจะดีกว่าในที่เก็บสิ่งประดิษฐ์ (เช่น Artifactory for Maven & co.) อาจเป็นตัวเลือกสำหรับคุณ

ฉันได้ดู submodules, git-annex ฯลฯ แต่การทดสอบใน submodule รู้สึกผิดเช่นเดียวกับการมีภาคผนวกสำหรับไฟล์หลาย ๆ ไฟล์ที่คุณต้องการประวัติเต็ม

ที่จริงแล้วดูเหมือนว่า git-annex จะพอดีอย่างสมบูรณ์แบบ git-annex ช่วยให้คุณสามารถจัดเก็บเนื้อหาไฟล์ภายนอกที่เก็บ git (ที่เก็บมีตัวยึดแทน) คุณสามารถจัดเก็บเนื้อหาไฟล์ได้หลายวิธี (ส่วนกลาง git repo, ไดรฟ์ที่ใช้ร่วมกัน, ที่เก็บข้อมูลบนคลาวด์ ... ) และคุณสามารถควบคุมว่าเนื้อหาใดที่คุณต้องการมีในเครื่อง

คุณอาจเข้าใจผิดว่า git-annex ทำงานอย่างไร? git-annex เก็บประวัติเต็มของไฟล์ทั้งหมดที่จัดการ - เพียงแค่ให้คุณเลือกเนื้อหาไฟล์ที่คุณต้องการมีในเครื่อง

ในที่สุดเกี่ยวกับคำถามของคุณ:

การปฏิบัติที่ดีที่สุดสำหรับการใช้ git กับ repos ขนาดใหญ่ที่มีไฟล์ไบนารีจำนวนมากที่คุณต้องการให้มีประวัติคืออะไร?

จากประสบการณ์ของฉันตัวเลือกมักจะ:

  • หลีกเลี่ยงความต้องการไบนารีใน repo (สร้างตามความต้องการเก็บไว้ที่อื่น)
  • ใช้ git-annex (หรือวิธีแก้ไขปัญหาที่คล้ายคลึงกันเช่น Git LFS)
  • ใช้ชีวิตกับ repo ขนาดใหญ่ (ไม่ใช่การดำเนินการของ git ทั้งหมดที่ได้รับผลกระทบจากไฟล์ขนาดใหญ่และหากคุณมีคอมพิวเตอร์และไดรฟ์ที่รวดเร็วก็สามารถใช้งานได้)

การโคลนแบบตื้นสามารถใช้งานได้ในโหมดปกติหรือเป็น "แฮ็ค" หรือไม่?

นั่นอาจเป็นไปได้ อย่างไรก็ตามฉันไม่คิดว่าวิธีนี้จะช่วยแก้ปัญหาของคุณได้:

  • คุณจะสูญเสียผลประโยชน์ของคอมไพล์ที่มาจากการมีประวัติเต็มเช่นการค้นหาประวัติอย่างรวดเร็ว
  • การรวมกันอาจกลายเป็นเรื่องยุ่งยากเพราะ AKAIK คุณต้องมีประวัติอย่างน้อยกลับไปที่จุดสาขาเพื่อรวม
  • ผู้ใช้จะต้องทำการโคลนซ้ำเป็นระยะเพื่อให้ขนาดของโคลนเล็ก ๆ
  • มันเป็นวิธีการที่ไม่ธรรมดาในการใช้คอมไพล์ดังนั้นคุณอาจพบปัญหาเกี่ยวกับเครื่องมือมากมาย

"ใหญ่เกินไป" สำหรับพื้นที่เก็บข้อมูลคอมไพล์ในสถานที่มีขนาดเท่าใด เราควรหลีกเลี่ยงการสลับถ้าเราสามารถทำให้มันลดลงถึง 4GB? 2GB?

ขึ้นอยู่กับโครงสร้างของ repo (ไฟล์น้อย / มาก ฯลฯ ) ขึ้นอยู่กับว่าคุณต้องการจะทำอะไรขึ้นอยู่กับว่าคอมพิวเตอร์ของคุณเป็นอย่างไรและด้วยความอดทนของคุณ :-)

เพื่อให้คุณมีความคิดที่รวดเร็ว: บนแล็ปท็อป (ใหม่ แต่มีสเปคต่ำ) การยอมรับไฟล์ 500 MB ใช้เวลา 30-60 วินาที เพียงแค่แสดงรายการประวัติ (บันทึก git เป็นต้น) จะไม่ได้รับผลกระทบจากไฟล์ขนาดใหญ่ สิ่งต่าง ๆ เช่น "git log -S" ซึ่งต้องสแกนเนื้อหาไฟล์นั้นช้ามาก - อย่างไรก็ตามความเร็วส่วนใหญ่ถูกควบคุมโดย I / O ดังนั้นมันจึงไม่ใช่ความผิดของ git

ใน repo 3 GB ที่มีการแก้ไขเพียงเล็กน้อย "git log -S" ใช้เวลาประมาณหนึ่งนาที

ดังนั้นฉันจะบอกว่าสองสาม GB ก็โอเคแม้ว่าจะไม่เหมาะ อาจมีมากกว่า 10-20 GB ที่อาจผลักดันได้ แต่อาจเป็นไปได้ - คุณต้องลอง


ขอบคุณสำหรับการตอบกลับอย่างละเอียด แน่นอนฉันจะตรวจสอบการใช้ภาคผนวกสำหรับเอกสารทดสอบ แถบสำหรับ "ประสิทธิภาพที่สมเหตุสมผล" น่าจะเป็น "ใกล้ svn" นั่นคือถ้ามันช้าลงอย่างมีนัยสำคัญสำหรับการดำเนินการใด ๆ ก็จะมีแรงเสียดทานมากเกินไปที่จะเปลี่ยน
Anders Forsgren

ฉันคิดว่า Git LFS สามารถใช้สำหรับการจัดเก็บไฟล์ไบนารีขนาดใหญ่ได้
IgorGanapolsky

@IgorG: ใช่ Git LFS เป็นอีกทางเลือกมีคนอื่น ขอบคุณที่ชี้ให้เห็นฉันแก้ไขโพสต์ของฉัน
sleske

4

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

การย้ายไปที่คอมไพล์จะไม่สามารถแก้ปัญหาเหล่านี้ได้ แต่ปัญหาในการใช้เครื่องมือของคุณและหากคุณใช้คอมไพล์แบบเดียวกันปัญหาจะยังคงอยู่

คุณสามารถแยกสาขาใน svn ได้อย่างง่ายดายในคอมไพล์และโดยทั่วไปการรวมนั้นง่ายและมีข้อผิดพลาดเหมือนกัน Git ได้รับการออกแบบมาเพื่อทำงานกับซอร์สโค้ดเคอร์เนลดังนั้นจึงมีข้อสมมติฐานบางอย่างที่อาจไม่สามารถใช้ได้ในทุกกรณีเช่นคุณที่มีไบนารีขนาดใหญ่และมีประวัติที่ยาวนาน ความตั้งใจที่อยู่เบื้องหลัง DVCS คือผู้ใช้ทุกคนทำงานได้อย่างมีประสิทธิภาพและทำงานร่วมกันในเวลาต่อมาเท่านั้น - นั่นคือพวกเขามี repo ของตัวเอง (สำเนา) ทำงานตามที่พวกเขาชอบและจากนั้นผลักดันการเปลี่ยนแปลงไปยังผู้อื่นที่ต้องการ ระบบ federated ที่ใช้ในการพัฒนาเคอร์เนลของ linux นั้นสมบูรณ์แบบสำหรับสิ่งนี้ - คุณผลักดันการเปลี่ยนแปลงของคุณต่อโซ่ที่รวมเข้ากับ codebase ของเขาแล้วผลักมันไปยังคนต่อไปจนกว่าจะถึง Linus ผู้วางจำหน่าย ทีมส่วนใหญ่ใช้ git ในทำนองเดียวกัน แต่มีเพียง 1 upstream guy ซึ่งมักจะเป็น repo ด้าน 'เซิร์ฟเวอร์' ของฝั่งเซิร์ฟเวอร์

ดังนั้นฉันจะดูการเปลี่ยนเวิร์กโฟลว์ของคุณก่อนเท่านั้นการโยกย้ายไปยังคอมไพล์เมื่อคุณมีวิธีการทำงานที่ดีขึ้น ใช้การแยกและผสานใน SVN หากคุณไม่เปลี่ยนชื่อไฟล์หรือการรวมไดเรกทอรีทำได้ค่อนข้างดี


4
“ คุณสามารถแยกสาขาใน svn ได้อย่างง่ายดายในคอมไพล์และโดยทั่วไปการรวมนั้นง่ายและมีข้อผิดพลาดเหมือนกัน” ว้าวนั่นเป็นข้อโต้แย้งที่ถกเถียงกันมาก การผสานในคอมไพล์ในความคิดของฉันมักจะง่ายและใน svn มักจะเป็นฝันร้ายแม้ในเวอร์ชันหลังจากความพยายามแบบครึ่งที่การผสานการติดตามถูกนำมาใช้ (ใช่ฉันทำงานกับ git ไม่ใช่เฉพาะใน repo นี้) เวิร์กโฟลว์ที่เราต้องการมีคือที่ซึ่งคุณสร้างสาขาฟีเจอร์, ตรวจสอบโค้ด / สร้าง CI บนสาขานั้น ไม่มีทางที่จะทำเช่นนั้นใน SVN โดยไม่มีความยุ่งยากใหญ่หลวง
Anders Forsgren

2
ไม่เราทำตลอดเวลาที่นี่ ฉันเพิ่งผ่าน 157 สาขาใน repo SVN ของฉันเพื่อดูว่าสามารถลบอะไรได้บ้าง เราแยกสาขาตรวจสอบแล้วรวมกันเกือบทุกวันที่นี่มีปัญหา แต่ก็มีการแก้ไขเสมอโดยนำสาขาใหม่ออกจากลำตัวและรวมการเปลี่ยนแปลงเข้าด้วยกัน (เพื่อให้สามารถผสานกลับได้อย่างง่ายดายในภายหลัง) . มันใช้ได้กับกิ่งโบราณเท่านั้น หากคุณมีความคับข้องใจอย่างมากคุณก็ไม่เข้าใจดีพอ Git จะทำให้คุณผิดหวังอย่างมาก
gbjbaanb

2
ฉันแค่ไม่ได้สัมผัสมัน เมื่อทำงานกับคอมไพล์ (อย่างที่ฉันบอกว่าทำ แต่ใน repos เล็ก ๆ ) ฉันคิดว่ามันง่ายและเป็นธรรมชาติที่จะทำการแยกฟีเจอร์การรีบูทการบีบอัดและการรวม "ความขัดแย้งของต้นไม้หลังจากเปลี่ยนชื่อ" เป็นต้นรู้สึกไม่ค่อยดีนักและความจริงที่ว่าคุณสามารถจำลองประวัติศาสตร์เชิงเส้นและเรียบง่าย (ผ่าน rebase + สควอชและอื่น ๆ ) เป็นสิ่งสำคัญมาก ดังนั้น: เพื่อรักษาคำถามในหัวข้อ (git กับ repos ขนาดใหญ่): สมมติว่า svn ไม่รองรับเวิร์กโฟลว์ที่ฉันต้องการและ git ทำ
Anders Forsgren

1
ใน บริษัท ก่อนหน้านี้เราใช้คอมไพล์และฉันรู้ว่ามีคนที่เคยสูญเสียงานของเขาใช้เป็นประจำดังนั้นมันจึงไม่ใช่ระบบที่สมบูรณ์แบบไม่ว่าด้วยวิธีใด! หรือ SVN ไม่ใช่ แต่ SVN เหมาะสมกว่าสำหรับสถานการณ์ของคุณมากกว่า git IMHO และทำงานได้ดี ในหัวข้อวิธีการทำให้ git ทำงานอย่างที่คุณต้องการ ... ฉันไม่แน่ใจว่ามันจะเสียใจ
gbjbaanb

7
@gbjbaanb หากมีคนสูญเสียงานของพวกเขากับ Git พวกเขากำลังทำอะไรผิดอย่างมหันต์
RubberDuck

2

ดูในรายชื่อผู้รับจดหมายของ GCC การโอนย้ายทรีคอมไพเลอร์ของGCCจาก SVN ไปยัง GIT ได้รับการกล่าวถึงในขณะนี้ (สิงหาคมและกันยายน 2015) ในขณะที่ยังคงรักษาประวัติของ GCC ดูที่เก็บเช่นสำหรับเครื่องมือการแปลงและเกณฑ์การยอมรับสำหรับเธรดเมลการแปลง git ; คุณจะพบการอ้างอิงถึงเครื่องมือและขั้นตอนที่เกี่ยวข้องกับการแปลง (ซึ่งไม่ตรงไปตรงมาเท่าที่ควรการแปลงประวัติฐานรหัสขนาดใหญ่นั้นต้องใช้เวลา 36 ชั่วโมงและ RAM 64GB ไบต์ IIRC)


คุณหมายถึงการโยกย้ายจาก SVN ไปยัง Git หรือไม่ การย้ายจากระบบควบคุมเวอร์ชันไปยังชุดคอมไพเลอร์ดูเหมือนจะแปลก ... นอกจากนี้สิ่งนี้อ่านเหมือนข้อคิดเห็นมากกว่าคำตอบอีกเล็กน้อย
8bittree

ใช่. ขอโทษที่พิมพ์ผิด
Basile Starynkevitch

ขอบคุณ 36 ชั่วโมงฟังเหมือนสายลมพวกเราสามารถเปลี่ยนได้ในสองสามสัปดาห์ ...
Anders Forsgren

2

หากการแปลงพื้นที่เก็บข้อมูล SVN ทั้งหมดเป็นผลลัพธ์ Git ในพื้นที่เก็บข้อมูลขนาดใหญ่ซึ่งไม่สามารถทำการโคลนได้คุณสามารถลองใช้SubGitเพื่อสร้างมิเรอร์ Git ที่มีขนาดเล็กลงสำหรับบางส่วนของที่เก็บ Subversion ของคุณ

ตัวอย่างเช่นคุณสามารถนำเข้าและซิงค์ไดเรกทอรีย่อยของที่เก็บ SVN ของคุณhttp://domain/repos/trunk/project/src:

subgit configure --layout auto --trunk trunk/project/src http://domain/repos project.git
edit project.git/subgit/config
edit project.git/subgit/authors.txt
subgit install project.git

สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับการใช้ SubGit อ้างถึงของเอกสาร

ทันทีที่คุณมี Git mirror ของไดเรกทอรีนั้นคุณสามารถใช้ที่เก็บ Git เพื่อส่งการเปลี่ยนแปลงใหม่ที่จะสะท้อนในพื้นที่เก็บข้อมูล SVN ทันที เนื่องจากคุณซิงค์เฉพาะบางส่วนของที่เก็บ SVN ซึ่งย่อขนาดของที่เก็บ Git ที่แปลงแล้วและคุณยังสามารถสร้างสาขารวมเข้าด้วยกันใช้เวิร์กโฟลว์ใดก็ได้จากด้าน Git

หรือคุณสามารถนำเข้าที่เก็บ SVN ทั้งหมด แต่ไม่รวมไฟล์ขนาดใหญ่จากการซิงค์:

subgit configure --layout auto --trunk trunk http://domain/repos project.git
edit project.git/subgit/config
...
[svn]
    excludePath = *.bin
    excludePath = *.iso
...
edit project.git/subgit/authors.txt
subgit install project.git

ที่เก็บผลลัพธ์ของ Git ควรมีขนาดที่เหมาะสมและนักพัฒนายังสามารถใช้ Git เพื่อส่งการเปลี่ยนแปลงไปยังที่เก็บข้อมูลของการโค่นล้ม

โปรดทราบว่าโซลูชันนี้จะทำงานได้ดีสำหรับคุณหากคุณพร้อมที่จะให้เซิร์ฟเวอร์ Subversion ทำงานและใช้ Git ควบคู่ไปกับที่เก็บ SVN ของคุณ

คำเตือน: ฉันเป็นหนึ่งในนักพัฒนา SubGit; SubGit เป็นซอฟต์แวร์เชิงพาณิชย์พร้อมตัวเลือกฟรีจำนวนมาก


1

ฉันเข้าหาสถานการณ์ของคุณด้วยวิธีต่อไปนี้:

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

2) ใช้bfgและเครื่องมือตัวกรองสาขาอย่างแข็งขันเพื่อลองและหด repo git ของคุณดังที่กล่าวไว้ที่นี่: https://confluence.atlassian.com/bitbucket/reduce-repository-size-321848262.html

3) ใช้ git-annex หรือ Git LFS หรือเพียงแค่เซิร์ฟเวอร์จัดเก็บข้อมูลภายนอกสำหรับไบนารีขนาดใหญ่ของคุณ (การถ่ายโอนไฟล์โดยใช้เชลล์สคริปต์ในเวลาที่สร้าง)

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

หวังว่านี่จะช่วยได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.