ฉันยังเป็นผู้ใช้โค่นล้มคนหนึ่งที่พยายามให้ความรู้แก่ตัวเองอีกครั้งในการควบคุมเวอร์ชันแบบกระจาย
เมื่อใช้การโค่นล้มฉันเป็นแฟนตัวยงของวิธีการย่อยโครงการและกับอดีตนายจ้างส่วนใหญ่ของฉันเราจะจัดโครงสร้างสาขาที่เก็บของเรา แท็ก & ลำต้นดังนี้:
branches-+
+-personal-+
| +-alice-+
| | +-shinyNewFeature
| | +-AUTOMATED-+
| | +-shinyNewFeature
| +-bob-+
| +-AUTOMATED-+
| +-bespokeCustomerProject
+-project-+
+-shinyNewFeature
+-fixStinkyBug
tags-+
+-m20110401_releaseCandidate_0_1
+-m20110505_release_0_1
+-m20110602_milestone
trunk
ภายในต้นไม้ต้นกำเนิดจริงเราจะใช้โครงสร้างคล้ายกันดังต่อไปนี้
(src)-+
+-developmentAutomation-+
| +-testAutomation
| +-deploymentAutomation
| +-docGeneration
| +-staticAnalysis
| +-systemTest
| +-performanceMeasurement
| +-configurationManagement
| +-utilities
+-libraries-+
| +-log-+
| | +-build
| | +-doc
| | +-test
| +-statistics-+
| | +-build
| | +-doc
| | +-test
| +-charting-+
| | +-build
| | +-doc
| | +-test
| +-distributedComputing-+
| | +-build
| | +-doc
| | +-test
| +-widgets-+
| +-build
| +-doc
| +-test
+-productLines-+
| +-flagshipProduct-+
| | +-coolFeature
| | +-anotherCoolFeature
| | +-build
| | +-doc
| | +-test
| +-coolNewProduct
+-project-+
+-bigImportantCustomer-+
| +-bespokeProjectOne
| +-bespokeProjectTwo
+-anotherImportantCustomer-+
+-anotherBespokeProject
แนวคิดคือ (และยังคงเป็น) เพื่อใช้โครงสร้างของพื้นที่เก็บข้อมูลเพื่อช่วยในการสื่อสารโครงสร้างระหว่างทีมวิศวกรรม ส่วนที่ลูกค้าเผชิญกับธุรกิจและผู้เชี่ยวชาญด้านโดเมน & อื่น ๆ อีกมากมาย
หากต้องการปัญญา: เอกสารต้นฉบับที่อยู่ในไดเรกทอรี "project" หนึ่งรายการจะถูกใช้ (และรับเงิน) เพียงครั้งเดียว เอกสารที่อยู่ในหนึ่งในไดเรกทอรี "productLines" ทำเงินได้หลายเท่าจากผลิตภัณฑ์ที่ได้รับจากการขาย เอกสารที่อยู่ในไดเรกทอรี "ห้องสมุด" แห่งใดแห่งหนึ่งจะได้รับเงินหลายเท่าจากผลิตภัณฑ์ใด ๆ ที่ใช้ขายได้
มันทำให้ความคิดของค่าตัดจำหน่ายของค่าใช้จ่ายที่ชัดเจนและช่วยสร้างการสนับสนุนสำหรับเอกสารที่มาใช้ซ้ำในธุรกิจ
นอกจากนี้ยังหมายความว่ามีโครงสร้างทั่วไปที่เครื่องมือการสร้างอัตโนมัติของเราสามารถทำงานได้ (สคริปต์สำหรับการสร้างของเราเดินไปที่ต้นกำเนิดเพื่อค้นหาโฟลเดอร์ "สร้าง" ซึ่งพวกเขาค้นหาแฟ้มการกำหนดค่าที่ระบุว่าจะสร้างแต่ละองค์ประกอบได้อย่างไรกระบวนการที่คล้ายกันนี้เกิดขึ้นสำหรับการสร้างและทดสอบเอกสาร)
อย่างมีนัยสำคัญผลิตภัณฑ์ที่ฉันทำงานมักใช้เวลานานในการรันการวัดประสิทธิภาพและการทดสอบคุณสมบัติ 20 ถึง 200 ชั่วโมง การสร้างบางแห่งระหว่างหลาย GB ถึงหลาย TB ของผลการทดสอบที่ประมวลผล / ข้อมูลกลาง (ที่ต้องจัดเก็บและเชื่อมโยงกับการกำหนดค่าระบบโดยเฉพาะเพื่อปรับปรุงประสิทธิภาพในช่วงเวลาที่สามารถวัดได้) ปัญหานี้ทำให้การจัดการการกำหนดค่าเป็นสิ่งสำคัญที่ต้องพิจารณาและยังมีข้อกำหนดบางประการสำหรับการรวมศูนย์เนื่องจากทรัพยากรการคำนวณที่จำเป็นในการเรียกใช้การวัดประสิทธิภาพและการทดสอบคุณสมบัติมี จำกัด (กลุ่มเล็ก ๆ ของ 64-128 แกน)
ในฐานะโน้ตตัวสุดท้าย; ระบบการรวมอย่างต่อเนื่องรู้ว่าจำเป็นต้องมีการสร้างการสร้าง; การวิเคราะห์เชิงสถิต การทดสอบควันและการทดสอบหน่วยทำงานในแต่ละครั้งที่มีการปรับเปลี่ยนลำต้นแต่ละครั้งที่มีการแก้ไขสาขา "แท็ก" ใด ๆ และทุกครั้งที่มีการแก้ไขสาขาสาขา "อัตโนมัติ" ด้วยวิธีนี้นักพัฒนาส่วนบุคคลสามารถใช้ระบบ CI กับสาขาส่วนบุคคลของพวกเขาความสามารถที่สำคัญ IMHO
ตอนนี้นี่คือคำถามของฉัน: ฉันจะทำซ้ำสิ่งที่กล่าวมาทั้งหมด (และปรับปรุงให้ดีขึ้นได้อย่างไรถ้าเป็นไปได้) ด้วย Mercurial
--edit:
แนวความคิดปัจจุบันของฉันคือการใช้ Subversion Repository ส่วนกลางเพื่อกำหนดโครงสร้างโดยรวม แต่อนุญาตให้ใช้ hg เป็นไคลเอ็นต์เพื่อให้นักพัฒนาสามารถมี repos ให้ใช้งานได้