การที่อะตอมใช้ระบบการกำหนดเวอร์ชันหมายความว่าอย่างไร


34

หนึ่งในเหตุผลที่โปรแกรมเมอร์ชอบ SVN มากกว่า CVS คืออดีตยอมให้มีการปรมาณู สิ่งนี้หมายความว่า ?


นี่อาจช่วยใครซักคนมันอธิบายว่ามันคืออะไร (มันใช้คอมไพล์เป็นตัวอย่าง แต่อาจจะสามารถนำไปใช้กับ VCS อื่นได้)
Fagner Brack

คำตอบ:


69

หมายความว่าเมื่อคุณคอมมิตไปยังระบบควบคุมเวอร์ชันทุกสิ่งที่คุณต้องการคอมมิทเข้าไปหรือไม่มีอะไรทำ

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

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


9
ผลที่สำคัญของเรื่องนี้ก็คือถ้าคุณตรวจสอบในรัฐใดก็ตามแล้วผลเสมอสถานะที่สอดคล้องกัน (ยกเว้นใด ๆ ใช้ความผิดพลาดเช่นลืมที่จะกระทำแฟ้มของหลักสูตร): มันเป็นอย่างใดอย่างหนึ่งจากก่อนที่จะกระทำหรือจากหลังความมุ่งมั่นและไม่มีอะไรในระหว่าง ใน CVS อาจมาจาก "half-way through the commit" พฤติกรรม SVN นั้นดีมากสำหรับสิ่งต่าง ๆ เช่นการรวมอย่างต่อเนื่อง สำหรับระบบ CVS ระบบเหล่านั้นใช้ในการบังคับใช้ "ช่วงเวลาที่เงียบ" โดยที่พวกเขาจะใช้การเช็คเอาท์ที่กำหนดหากไม่มีการยืนยันอีกต่อไปเมื่อทำจำนวนวินาที / นาทีหลังจากเช็คเอาต์เสร็จแล้ว
Joachim Sauer

2
ความทรงจำที่มืดเกี่ยวกับการใช้ CVS ทำให้ฉันเศร้าขณะที่ฉันอ่านสิ่งนี้
shabunc

9
@Spike - จริง แต่นั่นเป็นการกระทำโดยเจตนา ใน CVS ปัญหาสามารถเกิดขึ้นได้โดยไม่มีข้อบกพร่องของคุณเองในขณะที่อยู่ใน SVN คุณต้องทำงาน
Michael Kohne

3
@DanNeely - CVS ส่งมอบทีละรายการ นั่นเป็นเหตุผลที่คุณได้รับการคอมมิตบางส่วน - ไฟล์บางส่วนผ่านไปแล้วมันจะหยุดเมื่อมันกระทบกับสิ่งที่มันไม่สามารถกระทำได้ (เนื่องจากความขัดแย้ง) มันเป็นผลมาจาก CVS ที่ฉันคิดว่าเติบโตมาจาก RCS
Michael Kohne

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

15

นี่คือคำอธิบายเช่นในBye-bye CVS ฉันถูกบทความที่ถูกโค่นล้มโดยAndy Lester :

ถ้าฉันพยายามคอมมิชชันใน Subversion แต่ไฟล์ใดไฟล์หนึ่งมีข้อขัดแย้งหรือล้าสมัยไม่มีไฟล์ใดที่คอมมิท ใน CVS คุณได้รับชุดของไฟล์ที่คุณต้องแก้ไข RIGHT NOW

ความจริงที่ว่า CVS บังคับให้โปรแกรมเมอร์ทำการแก้ไขการผสานทันทีนั้นมีประสิทธิภาพเหมือนที่ได้รับ เมื่อเปรียบเทียบกับตัวเลือกในการหน่วงเวลา / ยกเลิก / รวมการเปลี่ยนแปลงอย่างรอบคอบเป็นประโยชน์อย่างมาก


ประโยชน์อื่น ๆ ของ SVN เหนือ CVS ที่อธิบายไว้ในบทความด้านบนคือ:

  • ทุกอย่างในท้องที่ที่คุณทำ
     
    หากคุณต้องการ CV ต่าง ๆ คุณต้องเชื่อมต่อกับที่เก็บของคุณได้ ไม่มีการเชื่อมต่อเน็ตไม่แตกต่างกัน การโค่นล้มเก็บสำเนาเก่าแก่ของสิ่งที่คุณกำลังทำอยู่ดังนั้น svn diff จะทำงานได้ดี ต้องการเริ่มใหม่หรือ svn ย้อนกลับทำงานไม่ได้เชื่อมต่อเช่นกัน

  • ชื่อสัญลักษณ์ของการแก้ไข
     
    HEAD เป็นชื่อของส่วนท้ายของลำต้นใน CVS แต่ฉันอยากจะพูดว่า“ -r-1″ เหมือนฉันสามารถย้อนกลับไปได้ในช่วงวัน PVCS ด้วย CVS ฉันต้องทำการบันทึก CV ในสิ่งที่ฉันกำลังแก้ไขแล้วลบออก ไม่สนุกเลย ด้วยการโค่นล้มฉันสามารถพูด svn diff -r PREV

  • การรายงานสถานะจริง
     
    ใน CVS วิธีเดียวที่คุณสามารถดูได้ว่ามีบางสิ่งบนเซิร์ฟเวอร์ใหม่กว่าคือการปรับปรุง cvs และหวังว่าสิ่งที่เกิดขึ้นจะไม่ทำให้เกิดความขัดแย้ง ด้วยคำสั่ง svn สถานะฉันได้รับสถานะจริงดังนั้นฉันสามารถดูว่ามีข้อขัดแย้งก่อนที่ฉันจะทำการอัพเดตหรือไม่

  • การจัดการความขัดแย้ง
     
    ในการรวมที่เป็นประโยชน์ใน CVS หากมีข้อขัดแย้งคุณจะได้รับเครื่องหมายความขัดแย้งในไฟล์ของคุณ ในการโค่นล้มคุณจะได้รับเครื่องหมายข้อขัดแย้งรวมทั้งสำเนาไฟล์ต้นฉบับพรีขัดแย้งของคุณรวมทั้งเวอร์ชันที่ลงมาจากเซิร์ฟเวอร์รวมถึงเวอร์ชันที่คุณแก้ไขในตอนแรก จากนั้นคุณจะต้องแก้ไข svn อย่างชัดเจน filename.txt เพื่อแจ้งการโค่นล้มว่าคุณได้แก้ไขปัญหาแล้ว ไม่มีการย้อนกลับไปสู่ ​​CVS โดยไม่ตั้งใจอีกต่อไปโดยมีเครื่องหมายข้อขัดแย้ง


8

หมายความว่าการเปลี่ยนแปลงทั้งหมดที่ทำกับไฟล์ทั้งหมดถูกทำในธุรกรรมเดียวดังนั้นจะสำเร็จหรือไม่ทำเลย

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


มันไม่ดีใช่ไหม มิฉะนั้นการคอมมิทบางส่วนจะส่งผลให้ไฟล์ซิงค์
Geek

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