นอกเวลาฉันจะพยายามหากลยุทธ์ในการควบคุมเวอร์ชันสำหรับ บริษัท ของฉัน ปัจจุบันเราใช้ SVN แต่ไม่มีโครงสร้าง - โดยพื้นฐานแล้วเรามีลำตัวและมุ่งมั่นเท่านั้น เมื่อเร็ว ๆ นี้ผู้จัดการฝ่ายพัฒนาเริ่มต้นพื้นที่เก็บข้อมูลที่สองซึ่งทำหน้าที่เป็น "แท็ก" ของเรา แต่จะต้องรวมเข้ากับ "ลำต้น" ด้วยตนเองเนื่องจากไม่ได้เป็นส่วนหนึ่งของพื้นที่เก็บข้อมูลเดียวกัน แต่แยกต่างหากโดยสิ้นเชิง ในความเป็นจริงมีเพียงโฟลเดอร์เดียวที่เรียกว่า "Dev" (จริง ๆ แล้วมีโฟลเดอร์ "Dev" ที่แตกต่างกันตามวันที่ที่แตกต่างกัน แต่เพียงแค่ "Dev" เป็นโฟลเดอร์หลัก) และภายใต้นั้นเป็นทุกอย่างอื่น โครงการอื่น ๆ ทั้งหมด มันไม่ได้จัดโดยโปรเจคเลยมันไม่มีคอนเซ็ปต์ของ branch / tag / trunk หรืออะไรเลย คนที่ตั้งขึ้นครั้งแรก (หายไปนาน แน่นอน) ดูเหมือนจะไม่รู้วิธีตั้งค่า SVN เลยและตั้งแต่นั้นมาก็ไม่มีใครใส่ใจที่จะเรียนรู้วิธีการทำสิ่งต่าง ๆ อย่างถูกต้องเพราะกลัวว่าจะทำลายบางสิ่งบางอย่าง เราไม่ใช้ CI ใด ๆ (หรือการทดสอบอัตโนมัติโชคไม่ดี)
ก่อนอื่นเราควรแยกมันเป็นโครงการหรือไม่ ตัวอย่างเช่นเรามี: เว็บไซต์ ASP.NET สองแห่ง (ไม่ใช่เว็บแอปพลิเคชั่น, เว็บไซต์), บริการเว็บ, โฟลเดอร์การปรับใช้สำหรับสคริปต์ตารางทั้งหมดและขั้นตอนการจัดเก็บ, ไคลเอนต์บรรทัดคำสั่งสองรายการสำหรับโครงการภายนอกที่เรียกโดย เว็บไซต์และโฟลเดอร์ที่ใช้ร่วมกันที่มีวัตถุทางธุรกิจทั่วไปและสิ่งที่คล้ายกัน หากสิ่งเหล่านี้เป็นโครงการของตัวเองโดยมีการติดตั้ง branch / tag / trunk หรือควรเป็นดังนี้:
dev/
branches/
tags/
trunk/
Site1/
Site2/
WebService/
SharedCode/
และมีสาขาทั้งหมดและทุกอย่างมีสำเนาของโฟลเดอร์ Dev ทั้งหมดหรือไม่ วิธีการดังกล่าวอาจกลืนได้ง่ายกว่าเนื่องจากเรามักจะมีสถานการณ์ที่เราจำเป็นต้องทำการเปลี่ยนแปลงในไลบรารีรหัสที่ใช้ร่วมกันและอย่างน้อยหนึ่ง (โดยปกติทั้งสอง) ของเว็บไซต์เช่นกัน
ประการที่สองเราทำการเผยแพร่เป็นประจำ ("พุช" ใน parlance ของเรา) ไปยังเซิร์ฟเวอร์ dev และเซิร์ฟเวอร์สดของเรา จากสิ่งที่ฉันได้อ่านวิธีที่ดีที่สุดในการจัดการสิ่งนี้ก็คือการพัฒนาทั้งหมดจะเข้าสู่ trunk / สาขาเป็น "ชั่วคราว" และใช้สำหรับการเพิ่มคุณสมบัติใหม่ที่อาจส่งผลกระทบต่อลำต้นและแท็กสำหรับการเปิดตัว? ดังนั้นเราจึงผลักดันทุกเดือนสมมติว่าและฉันกำลังทำงานในโมดูลใหม่ ฉันจะแยกสาขาและใช้รหัสนั้นเพื่อเขียนและทดสอบและอะไรก็ตาม เมื่อโมดูลเสร็จสิ้นฉันจะรวมมันกลับเข้าไปใน trunk (และอาจลบสาขา) และเมื่อเราพร้อมที่จะปรับใช้เราจะติดแท็ก ("May2011" สมมติว่า) หากเรามีการแก้ไขข้อผิดพลาดหลังจากที่เผยแพร่จริงมันจะได้รับการแก้ไขในแท็ก May2011 และผสานเข้ากับลำต้น (เพื่อให้ลำต้นได้รับการแก้ไขเช่นกัน) แล้ว May2011 จะถูกผลักออกอีกครั้งพร้อมการแก้ไขหรือไม่ นี่เป็นความตั้งใจของการแท็กหรือไม่