tl; dr - ฟังดูเหมือนว่าถึงเวลาที่จะก้าวขึ้นสู่ลีกใหญ่แล้ว การวางลิปสติกบนหมูไม่ได้ทำให้สวยกว่านี้เว้นแต่คุณจะชอบอะไรแบบนั้น ...
ปัญหาคน
ปัญหาแรกคือการส่งข้อมูลให้ตรงกัน หากคุณมีหลายคนทำงานกับรหัสเดียวกันในเวลาเดียวกันคุณต้องการเพียงหนึ่งกฎเพื่อป้องกันปัญหา:
Rule 1: Always pull before you merge/rebase
เมื่อพูดถึง DVCS มันยากที่จะทำการเปลี่ยนแปลงสาขาระยะไกล (เช่นที่เก็บหลัก) และง่ายต่อการทำการเปลี่ยนแปลงในท้องถิ่น ทุกคนมีหน้าที่รับผิดชอบในการเพิ่มรหัสของตัวเองให้พอดีกับส่วนใหญ่โดยไม่มีปัญหา หากไม่มีคน 2 คนผูกพันในเวลาเดียวกันคุณก็ไม่ควรประสบ การเข้าถึงคอมมิชชันดั้งเดิม / ต้นแบบระยะไกลควรถูก จำกัด ให้นักพัฒนาเพียงไม่กี่คนและพวกเขาควรดึงการเปลี่ยนแปลงจากนักพัฒนาอื่น ๆ ผ่านสาขาการติดตามระยะไกล
ปัญหารหัส
คุณจะรู้ได้อย่างไรว่าการเปลี่ยนแปลงที่คุณทำไม่เกิดการแตกหัก
คำตอบง่ายๆ ... เขียนการทดสอบเพื่อพิสูจน์ว่าไม่ หากคุณเพิกเฉยต่อโรงเรียนแห่งความคิด TDD (การออกแบบการทดสอบการขับเคลื่อน) จุดทดสอบทั้งหมดคือการเพิ่มระดับการตรวจสอบที่ช่วยให้คุณสามารถเปลี่ยนรหัสได้โดยไม่ต้องทำลาย
Rule 2: Don't make assumptions, write proofs (ie tests).
นอกจากนี้ขอบเขตการทดสอบแบบเต็มควรรันก่อนที่คุณจะกดไปยังต้นแบบต้นกำเนิด / ต้นแบบระยะไกล
รักษาความมุ่งมั่นของคุณให้เล็กและรัดกุมที่สุดเท่าที่จะทำได้ ด้วยวิธีนี้หากคุณต้องการสำรองการเปลี่ยนแปลงที่ทำให้บางอย่างเสียหายในภายหลังคุณจะประหยัดได้โดยไม่ต้องใช้ชิ้นส่วนที่ไม่ทำลายรหัสอีกครั้ง
คุณอาจต้องปรับโครงสร้างองค์กรใหม่ก่อน
หากไม่สามารถแก้ไขปัญหาข้างต้นได้อย่างง่ายดายอาจมีปัญหาบางอย่างเกี่ยวกับโครงสร้างการพัฒนาที่จำเป็นต้องแก้ไขก่อน
เจ้าของโครงการควรเป็นผู้รักษาประตู หากมีปัญหาในการซิงค์อาจมีคนจำนวนมากที่มีสิทธิ์ในการเข้าถึง แม้ในโครงการขนาดใหญ่เช่นเคอร์เนลลินุกซ์นักพัฒนาเพียงไม่กี่คนเท่านั้นที่สามารถเข้าถึงที่เก็บต้นฉบับ / รีโมตต้นแบบ มีที่เก็บหลายระดับเพื่อจัดการคอมมิชชัน แทนเลเยอร์เดียวของแบบจำลองคอมมิชชันที่ทุกคนผลักดันการเปลี่ยนแปลงของพวกเขาไปยังจุดเริ่มต้นโมเดลลำดับชั้นมีผู้รักษาประตูที่ดึงการเปลี่ยนแปลงและตรวจสอบคุณภาพก่อนที่จะรวมเข้าไปในโครงการ แบบจำลองการมอบหมายแบบลำดับขั้นสามารถปรับขนาดได้ใหญ่กว่าและมีประสิทธิภาพมากกว่าแบบจำลองเลเยอร์เดี่ยวโดยไม่ลดคุณภาพ
สำหรับ devs ที่ไม่ได้กระทำการเข้าถึงพวกเขาควรจะเรียนรู้ที่จะสร้างตัวเองสาขาการติดตามระยะไกลของพวกเขา (คอมไพล์และ gitorious เป็นสิ่งที่ดีสำหรับการนี้) เพื่อให้ devs ที่ทำได้กระทำการเข้าถึงได้อย่างง่ายดายสามารถดึง / บูรณาการสาขาเข้าไปในแหล่งกำเนิด หากการเปลี่ยนแปลงมีขนาดเล็กแพตช์จะทำงานได้เช่นกัน
ความสามารถในการดึงการเปลี่ยนแปลงก่อนที่จะทำการผสาน / rebase ถือว่าคุณไม่ได้พัฒนาสาขาหลักในพื้นที่ของคุณ วิธีที่ง่ายในการจัดการสิ่งนี้คือการดึงเริ่มต้นก่อนที่คุณจะเริ่มเขียนโค้ดจากนั้นทำงานทั้งหมดของคุณในสาขานั้น วิธีที่ยากคือแยกสาขาก่อนรวมและย้อนกลับต้นแบบ
กำหนดรูปแบบการเข้ารหัสสำหรับโครงการโดยรวมและทำให้ devs ติดตาม ผู้พัฒนาที่เกี่ยวข้องควรเขียนโค้ดที่สอดคล้องกับมาตรฐาน / บรรทัดฐานของโครงการเพื่อลดการล้างข้อมูลให้น้อยที่สุด รูปแบบการเขียนรหัสอาจเป็นอุปสรรคสำคัญของอัตตาในโครงการเปิด หากไม่มีการตั้งค่ามาตรฐานทุกคนจะเขียนโค้ดในสไตล์ที่พวกเขาต้องการและโค้ดเบสจะเร็วขึ้นอย่างน่าเกลียดมาก
ตำนานของ "The Mythical Man Month"
เชื่อหรือไม่ว่าโครงการโอเพนซอร์ซที่ใหญ่ขึ้นและประสบความสำเร็จนั้นไม่ได้ทำงานเหมือนประชาธิปไตย พวกเขากำลังทำงานเป็นลำดับชั้น การระบุว่าโครงการไม่สามารถเติบโตได้เกินกว่า 8-10 นักพัฒนานั้นไร้เดียงสา หากเป็นจริงโครงการขนาดใหญ่เช่น Linux Kernel จะไม่มีอยู่จริง ปัญหาที่ลึกกว่าคือการให้ทุกคนมีส่วนร่วมในการเข้าถึงทำให้การสื่อสารที่มีประสิทธิภาพนั้นยากเกินกว่าจะจัดการได้
ปัญหาของเดือนมนุษย์ในตำนานสามารถเอาชนะได้จริง คุณเพียงแค่ต้องดำเนินโครงการของคุณเช่นทหาร มีหลายระดับในลำดับชั้นเนื่องจากเป็นความรู้ทั่วไปที่บุคคลแต่ละคนมีประสิทธิภาพในการจัดการการสื่อสารกับบุคคลเพียงไม่กี่คนเท่านั้น ตราบใดที่ไม่มีบุคคลใดมีหน้าที่รับผิดชอบในการจัดการงานมากกว่า 5-7 คนระบบก็สามารถปรับขนาดได้อย่างไม่มีกำหนด
อาจ จำกัด นักพัฒนาที่ดีที่สุด / มีประสบการณ์ในการผสานรวมมากขึ้นและการออกแบบ / การวางแผนระดับสูงขึ้น แต่นั่นไม่ใช่เรื่องเลวร้าย ส่วนหนึ่งของการขยายตัวคือการตัดสินใจว่าโครงการนั้นต้องการแผนระยะยาว คนที่อยู่ในระดับสูงสุดที่มีการลงทุนมากที่สุด (เวลาเป็นทรัพยากร) ในโครงการในอนาคตควรถูกเรียกเก็บเงินกับการตัดสินใจครั้งใหญ่
ยินดีที่ได้ทราบเกี่ยวกับโครงการโอเพนซอร์สที่กำลังประสบกับความเจ็บปวด ขอแสดงความยินดีและขอให้โชคดี