ตัวแบบข้อมูลภายในมีความแตกต่างกันโดยพื้นฐาน
โดยพื้นฐานแล้วใน SVN เมื่อคุณดูประวัติของสาขาคุณจะเห็นเฉพาะสิ่งที่เกิดขึ้นในสาขานั้น ดังนั้นเมื่อคุณผสานจากสาขาB
ไปยังสาขาA
ประวัติศาสตร์ของสาขาA
จะมีขนาดใหญ่หนึ่งกระทำที่มีการเปลี่ยนแปลงทั้งหมดที่ทำอย่างชัดเจนB
ตั้งแต่มันถูกแยก
ใน SVN เวอร์ชันแรกหากคุณต้องรวมสาขาB
เข้ากับสาขาA
อีกครั้งคุณต้องระบุช่วงการแก้ไขสาขาที่B
คุณต้องการผสานด้วยตนเองเพื่อหลีกเลี่ยงการรวมการแก้ไขเดียวกันสองครั้ง นักพัฒนาที่ฉลาดจะใช้ข้อความยืนยันเช่น 'ผสานใน B: 1234'
SVN 1.5 "แก้ไข" สิ่งนี้ แต่มันก็ไม่ได้เปลี่ยนวิธีการผสานถูกนำไปใช้เป็นพื้นฐาน เพียงเพิ่มข้อมูลเมตาบางส่วนในสาขาA
ทำให้ SVN ทราบว่าการแก้ไข 1234 ได้รับการรวมเข้าด้วยกันทำให้ SVN สามารถเลือกช่วงการแก้ไขที่ถูกต้องโดยอัตโนมัติ
แต่วิธีนี้เป็นวิธีแก้ปัญหาสำหรับรูปแบบข้อมูลที่พื้นฐานไม่สนับสนุนการติดตามสิ่งที่ถูกผสาน
การผสานสองกิ่งเป็นตัวอย่างที่ค่อนข้างง่าย แต่การถ่ายภาพสถานการณ์ที่ซับซ้อนกว่านี้
- สร้างสาขา
A
จากtrunk
และทำคอมมิทที่นี่
- สร้างสาขา
B
จากA
และทำคอมมิทที่นี่
- ทำคอมมิท
trunk
และA
- รวม
B
เข้ากับtrunk
- รวม
A
เข้ากับB
- รวม
A
เข้ากับtrunk
- รวม
B
เข้ากับtrunk
(สิ่งนี้ไม่ควรทำอะไรจริง ๆ )
การจัดการสิ่งนี้อย่างถูกต้องโดยใช้แบบจำลองข้อมูลเมตาจะซับซ้อนมาก (ฉันไม่รู้ว่า SVN จัดการกับสถานการณ์นี้ได้อย่างถูกต้องจริงหรือไม่และฉันไม่รู้สึกอยากทดสอบเลย)
การจัดการสถานการณ์นี้ในคอมไพล์นั้นง่ายมาก
ในคอมไพล์ทุกครั้งที่คุณส่งมอบออบเจคภายในที่แสดงถึงการคอมมิชชันนั้นมีการอ้างอิงถึงส่วนหัวก่อนหน้า เมื่อคุณรวมในสาขาการกระทำที่มีการอ้างอิงถึงหัวก่อนหน้าของสาขาทั้งหมดที่ถูกผสาน (คุณสามารถผสานมากกว่าหนึ่งสาขาในเวลาในคอมไพล์)
ดังนั้นเมื่อคุณตรวจสอบประวัติของคอมมิชชันเดียวในคอมไพล์คุณสามารถดูประวัติทั้งหมดคุณสามารถดูได้ว่ามันถูกแยกเมื่อใดมันถูกรวมเข้าด้วยกันและคุณสามารถดูประวัติของทั้งสองสาขาระหว่างการแยกและการรวม
ดังนั้นเมื่อรวมกันในสาขาที่มีการผสานบางส่วนมันเป็นเรื่องง่ายมากที่จะตรวจสอบสิ่งที่ได้รับการผสานแล้วและสิ่งที่ไม่ได้
ฉันไม่เคยมีประสบการณ์กับ Mercurial แต่ฉันสงสัยว่าผลงานภายในของมันคล้ายกับคอมไพล์
โดยพื้นฐานแล้วสำหรับ SVN มันเป็นเป้าหมายการออกแบบเพื่อทำให้การแตกกิ่งก้านสาขาในราคาถูก แต่ในคอมไพล์มันเป็นเป้าหมายการออกแบบเพื่อให้การรวมราคาถูก
ในที่สุดครั้งสุดท้ายที่ฉันใช้ SVN มันไม่สามารถจัดการการรวมที่ไฟล์ถูกเปลี่ยนชื่อในสาขาหนึ่งและแก้ไขในอื่น