โครงสร้างพื้นที่เก็บข้อมูลของ Mercurial พร้อม Comms ขององค์กรขนาดใหญ่การจัดการการกำหนดค่าและข้อกำหนดการทดสอบ


16

ฉันยังเป็นผู้ใช้โค่นล้มคนหนึ่งที่พยายามให้ความรู้แก่ตัวเองอีกครั้งในการควบคุมเวอร์ชันแบบกระจาย

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

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 ให้ใช้งานได้


1
ว้าว. คำตอบที่ดีสำหรับเรื่องนี้จะเป็นบทความยาวมากที่ฉันคิดว่า
Ed James

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

โดยทั่วไปการผสานอาจมาจากสาขาส่วนบุคคลในโครงการหรือสาขาคุณลักษณะและจากนั้นเข้าสู่ลำต้น ฉันไม่เคยประสบปัญหามากเกินไปกับการรวม (เราใช้ TortoiseSVN บน Win32) แต่เราไม่เคยวิ่งมานานเกินไป (ซ้ำมากที่สุดครั้งเดียว) โดยไม่รวมกลับเข้าไปในหีบ เรามักจะทำงานส่วนใหญ่ในลำตัวอยู่แล้วแม้ว่าเป้าหมายคือการทำให้การจัดการคนง่ายขึ้นแทนที่จะเป็นขั้นตอนการพัฒนา (หนึ่ง dev-lead นักพัฒนาอิสระที่ทำงานอยู่มากมายดังนั้นการมีทุกอย่างในลำตัวทำให้ง่ายขึ้นใน dev-lead เพื่อติดตามสิ่งที่เกิดขึ้น)
William Payne

ประเด็นสำคัญประการหนึ่งคือการพึ่งพาการทดสอบที่ขับเคลื่อนโดยระบบ CI โดยเฉพาะอย่างยิ่งในระดับการทดสอบระบบ นี่คือเพื่อช่วยสร้างความมั่นใจว่านักพัฒนาซอฟต์แวร์ที่แตกต่างกันไม่ได้รบกวนซึ่งกันและกันและเพื่อส่งเสริมความคิดที่มีขนาดเล็กมาก (นอกจากนี้การยกของคอมพิวเตอร์ที่จำเป็นในการเรียกใช้การทดสอบระบบหมายความว่ามีการช่วงชิงทรัพยากรทรัพยากรคอมพิวเตอร์น้อยลงหากคนทำงานส่วนใหญ่บนลำตัว)
William Payne

คำตอบ:


10

คำตอบของ Spoikeนั้นยอดเยี่ยม แต่มีบางสิ่งที่ฉันคิดว่ามันควรค่าแก่การเพิ่มซึ่งมากเกินไปสำหรับความคิดเห็น

องค์กรสาขา

ด้วย Mercurial คุณสามารถมองข้ามผังองค์กรแรกทั้งหมดของคุณอย่างมีความสุข Spoke กล่าวว่าที่เก็บแต่ละชุดมีแท็กสาขา (ชื่อและไม่ระบุชื่อ) และสามารถจัดระเบียบได้ตามความต้องการทางธุรกิจ

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

นอกจากนี้ไม่มีอะไรหยุดคุณมีนโยบายในการจัดโครงสร้างชื่อสาขาเพื่อให้สิ่งอำนวยความสะดวกที่เฉพาะเจาะจงเช่นสาขา AUTOMATION ของคุณ

การจัดระเบียบไดเรกทอรี

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

src-+
      +-(developmentAutomation)
      +-libraries-+
      |           +-(log)
      |           +-(statistics)
      |           +-(charting)
      |           +-(distributedComputing)
      |           +-(widgets)
      +-productLines-+
      |              +-(flagshipProduct)
      |              +-(coolNewProduct)
      +-project-+
                +-bigImportantCustomer-+
                |                      +-(bespokeProjectOne)
                |                      +-(bespokeProjectTwo)
                +-anotherImportantCustomer-+
                                           +-(anotherBespokeProject)

สิ่งนี้อนุญาตให้ผลิตภัณฑ์หรือโครงการ bespokeใด ๆ ใช้ชุดค่าผสมของไลบรารีในการแก้ไขใด ๆ ดูที่คลังย่อยของ Mercurialเพื่อดูวิธีจัดการไลบรารีที่ใช้สำหรับผลิตภัณฑ์หรือโครงการเวอร์ชันใด ๆ

ขั้นตอนการทำงาน

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

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

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

ตามที่แนะนำในหนังสือ Mercurial สามารถใช้hooksเพื่อทำขั้นตอนนี้โดยอัตโนมัติ:

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

ปัญหาอื่น ๆ

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


อีกครั้งคำตอบที่ยอดเยี่ยมและให้ข้อมูลอีกครั้ง ขอขอบคุณ.
William Payne

RE: องค์การสาขา ฉันยอมรับว่าผังองค์กรแรกสามารถถูกละเว้นได้อย่างมีความสุข มันไม่ได้สื่อสารเวิร์กโฟลว์เป็นอย่างดีอยู่แล้วและดังนั้นจึงไม่ได้ให้บริการยูทิลิตี้จริง ๆ นอกเหนือจากการประชุมเสริม อย่างไรก็ตามฉันต้องการแทนที่ด้วยสิ่งที่สื่อสารกับเวิร์กโฟลว์ (ง่ายที่สุดเท่าที่เป็นไปได้) อย่างยิ่งและกระตุ้นให้เกิดความมุ่งมั่นบ่อยครั้ง บางทีเรียกว่า "ลำต้น / การพัฒนา" สาขา "รายวัน" หลักจะทำเช่นนั้น?
William Payne

RE: การจัดทำไดเรกทอรี ฉันใช้องค์กรไดเรกทอรีต้นทางเป็นวิธีการสื่อสารอ่อน การกำหนดโครงสร้างโดยนัยในการจัดระเบียบของรหัส (และผ่านการทำธุรกิจโดยรวม) ฉันเริ่มเข้าใจว่า Mercurial มีแนวโน้มที่จะใช้อย่างยืดหยุ่นมาก แต่ฉันต้องการจำกัดความยืดหยุ่นบางอย่างในการกำหนดโครงสร้างตามวิธีที่ผู้คนคิดเกี่ยวกับธุรกิจโดยกำหนดโครงสร้างในแบบที่เอกสารของพวกเขาจัดอยู่ในเวิร์กสเตชันและพื้นที่เก็บข้อมูลเครือข่ายของเรา (การสื่อสารองค์กรมากกว่าเทคโนโลยี)
William Payne

RE: เวิร์กโฟลว์ ฉันคิดว่าเวิร์กโฟลว์ที่ง่ายที่สุดคือการดึงจากพื้นที่เก็บข้อมูล "รายวัน" ทำงานในพื้นที่นั้นจากนั้น (บ่อยครั้ง) กลับไปที่พื้นที่เก็บข้อมูล "รายวัน" เริ่มต้นจากการวิเคราะห์แบบคงที่การทดสอบควันและการทดสอบการถดถอยผ่านระบบ CI ฉันมีความสุขสำหรับ repo หลักที่จะ "เสีย" ตราบใดที่ฉันรู้เกี่ยวกับมันและตราบใดที่มันได้รับการแก้ไขอีกครั้งอย่างรวดเร็ว ในความเป็นจริงฉันกำลังพิจารณาการกระทำที่ "รายวัน" ซื้อคืนเพียงวิธีหนึ่งที่สามารถรวบรวมและสร้างเพื่อส่งเสริมให้กระทำบ่อยและคุ้มครองการทดสอบที่ดี (สำคัญกว่าความสามารถในการแยกงาน IMHO)
William Payne

@WilliamPayne - ขอบคุณ ในขณะที่ Mercurial ยืดหยุ่นได้ด้วยที่เก็บสาขาและตะขอที่เหมาะสมคุณสามารถสร้างข้อ จำกัด ที่คุณต้องการได้ในระดับองค์กรหรือพื้นที่เก็บข้อมูล โดยส่วนตัวแล้วฉันจะเริ่มด้วยการควบคุมในองค์กรและขอ CI สองสามตัวและขยายการควบคุมเหล่านั้นในอนาคตเมื่อความต้องการของพวกเขาชัดเจน ตัวอย่างเช่นการใช้ repos ย่อยอย่างรอบคอบอาจส่งเสริมให้ผู้คนตรวจสอบสิ่งต่าง ๆ ในเครื่องในโครงสร้างเดียวกับที่อยู่บนเซิร์ฟเวอร์เช่นโดยมีproductLinesหรือbigImportantCustomerเป็น repos ระดับสูง
Mark Booth

9

โอเคพยายามตอบคำถามนี้อย่างง่าย ๆ

สิ่งที่คุณต้องรู้

สิ่งแรกที่คุณต้องรู้: Mercurial ได้รับการควบคุมเวอร์ชันแบบกระจายและมีคุณสมบัติบางอย่างที่คุณควรทราบเกี่ยวกับรายการด้านล่าง

  • แหล่งมานั้นมาจากที่เก็บเดียวที่ซึ่งที่เก็บนั้นสามารถโคลนได้ ที่เก็บโคลนทั้งหมดสามารถแบ่งใช้โค้ดซึ่งกันและกันผ่านการซิงค์ (ด้วยคำสั่งดึงและพุชที่สามารถ จำกัด การเข้าถึงได้)
  • ผู้ใช้ทุกคนที่มีสำเนาของรหัสมีโคลนของพื้นที่เก็บข้อมูล หากพวกเขาต้องการสาขาพวกเขาสามารถทำได้ในโคลนท้องถิ่นของพวกเขา นั่นหมายความว่าคุณไม่จำเป็นต้องจัดระเบียบว่าผู้ใช้ทุกคนควรแยกสาขาอย่างไร พวกเขาสามารถทำได้ด้วยตนเอง
  • แท็กถูกสร้างขึ้นใน mercurial โดยคอมมิท (ซึ่งเหมือนกับแท็กฮาร์ดในคอมไพล์) หมายความว่าคุณไม่ต้องการไดเรกทอรีภายในโครงสร้างที่เก็บของคุณสำหรับแท็ก
  • รูปแบบปกติที่ผู้คนทำงานด้วยใน DVCS (ซึ่งใช้ใน github และ bitbucket) คือทำแบบกึ่งรวมศูนย์

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

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

การตั้งค่าที่เก็บต่อโครงการ

ดังนั้นการตั้งค่าปกติคือสำหรับแต่ละโครงการมีดังต่อไปนี้:

  • ที่เก็บแบบอ่านอย่างเดียวพับลิกที่ผู้รวมระบบมีหน้าที่รับผิดชอบ มันคือ "ความสุข"

    นั่นคือผู้ใช้ทุกคนสามารถดึง / ดึงเนื้อหา แต่ไม่สามารถเข้าถึงได้

  • ผู้ใช้แต่ละคนสามารถมีพับลิกพับลิกของตัวเองของที่เก็บ

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

  • ผู้ใช้แต่ละคนสามารถมีที่เก็บส่วนตัวของตนเอง

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

องค์กรรหัสที่มา

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

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

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

ฉันหวังว่าทั้งหมดนี้สมเหตุสมผล โปรดแสดงความคิดเห็นด้านล่างหากฉันพลาดรายละเอียดหรือต้องการอธิบายเพิ่มเติมและฉันจะพยายามแก้ไข


+1 สำหรับการตอบรับที่ดีมากโดยมีจุดที่มีประโยชน์มากมาย ในการตอบกลับหัวข้อแรกของคำตอบของคุณฉันไม่เข้าใจความสำคัญของผู้ใช้แต่ละคนที่มีที่เก็บสาธารณะของตนเอง บางทีฉันต้องคิดเพิ่มเติมเกี่ยวกับวิธีการจัดการเวิร์กโฟลว์แบบ peer-to-peer
William Payne

ในการตอบสนองต่อส่วนที่สองของคำตอบของคุณจุดทั้งหมด (ในใจของฉัน) ในการมีพื้นที่เก็บข้อมูลเดียวสำหรับทั้งองค์กรคือการสร้างภาพจิตที่ใช้ร่วมกันสำหรับโครงสร้างการทำงานและเพื่อให้ง่ายต่อการค้นหาส่วนประกอบที่สามารถ นำกลับมาใช้ใหม่ (มหาวิหารมากกว่าบาซ่ามาก แต่นั่นเป็นสภาพแวดล้อมที่ฉันทำงาน) ฉันอยากจะรู้วิธีที่จะบรรลุความรู้สึกเดียวกันของโครงสร้างองค์กร (ระบบการจัดเก็บเอกสาร) ด้วย DCVS
William Payne

ในการตอบสนองต่อส่วนที่สามของคำตอบของคุณ: ฉันเห็นด้วยอย่างสุดใจว่าระบบควบคุมแหล่งที่มานั้นใช้สำหรับเอกสารต้นฉบับและสิ่งประดิษฐ์ที่ได้มานั้นไม่ได้อยู่ในนั้น ฉันยังยอมรับด้วยว่ามันเป็นไปไม่ได้ในการจัดเก็บไบนารีขนาดใหญ่ของคำอธิบายใด ๆ ใน VCS อย่างไรก็ตามฉันเชื่อว่าคุณสามารถจัดเก็บไบนารีขนาดใหญ่ไว้ในที่ตั้งเครือข่ายที่ตกลงไว้พร้อมด้วยชื่อที่กำหนดและอ้างอิงจากภายใน VCS ตัวอย่างเช่นสภาพแวดล้อมการสร้างสามารถจัดเก็บเป็นชื่อดิสก์อิมเมจ VM และอ้างอิงจากสคริปต์การสร้างต่างๆ (เช่น: สร้างฉันบน build_env_A) สิ่งเดียวกันถือเป็นข้อมูลการทดสอบ
William Payne

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