tl; dr - Có vẻ như đã đến lúc bước lên các giải đấu lớn. Đặt son môi lên một con lợn không làm cho nó đẹp hơn, trừ khi bạn thuộc loại đó ...
Vấn đề con người
Vấn đề đầu tiên là đồng bộ hóa cam kết. NẾU bạn có nhiều người làm việc trên cùng một mã cùng một lúc, bạn chỉ cần một quy tắc để ngăn chặn sự cố:
Rule 1: Always pull before you merge/rebase
Khi nói đến DVCS, thật khó để thay đổi một nhánh từ xa (tức là kho lưu trữ chính) và rất dễ thực hiện các thay đổi đối với cục bộ. Mỗi người có trách nhiệm làm cho các bổ sung mã của riêng họ phù hợp với tổng thể lớn hơn mà không có vấn đề. Trừ khi 2 người cam kết cùng một lúc, bạn không nên trải nghiệm. Cam kết truy cập vào nguồn gốc / chủ từ xa chỉ nên giới hạn ở một vài nhà phát triển và họ nên kéo các thay đổi từ các nhà phát triển khác thông qua các nhánh theo dõi từ xa.
Vấn đề về mã
Làm thế nào để bạn biết rằng những thay đổi bạn thực hiện không phá vỡ mã?
Câu trả lời đơn giản ... Viết bài kiểm tra để chứng minh họ không. Nếu bạn bỏ qua trường phái tư tưởng TDD (Test Driven Design), toàn bộ điểm kiểm tra là thêm một mức xác minh cho phép bạn thay đổi mã mà không phá vỡ nó.
Rule 2: Don't make assumptions, write proofs (ie tests).
Ngoài ra, toàn bộ các bài kiểm tra nên được chạy trước khi bạn đẩy đến bản gốc / chủ từ xa.
Giữ cam kết của bạn nhỏ và súc tích nhất có thể. Bằng cách đó, nếu bạn cần sao lưu một thay đổi đã phá vỡ thứ gì đó sau này, bạn sẽ tiết kiệm được việc phải thực hiện lại các phần không phá mã.
Bạn có thể cần một số cấu trúc lại tổ chức đầu tiên
Nếu các giải pháp trên không thể dễ dàng được áp dụng, có thể có một số vấn đề với cấu trúc phát triển cần được giải quyết trước tiên.
Chủ dự án nên là người gác cổng. Nếu có sự cố đồng bộ hóa cam kết, có thể có quá nhiều người có quyền truy cập cam kết. Ngay cả trên các dự án lớn như nhân Linux, chỉ một số ít nhà phát triển có quyền truy cập vào kho lưu trữ gốc / từ xa. Thực tế có nhiều cấp kho để quản lý các cam kết. Thay vì một mô hình cam kết một lớp trong đó mọi người đang đẩy các thay đổi của họ về nguồn gốc, mô hình phân cấp có các người gác cổng kéo các thay đổi và xác minh chất lượng của họ trước khi đưa vào dự án. Mô hình cam kết phân cấp có thể mở rộng quy mô lớn hơn và hiệu quả hơn nhiều so với mô hình lớp đơn mà không làm giảm chất lượng.
Đối với các nhà phát triển mà không được cam kết truy cập, họ nên học cách tạo ra các chi nhánh theo dõi từ xa của mình (git và gitorious là tốt cho điều này) để các nhà phát triển người làm đã cam kết truy cập có thể dễ dàng kéo / integrate cành vào gốc. Nếu những thay đổi là nhỏ, các bản vá sẽ hoạt động tốt.
Khả năng kéo các thay đổi trước khi thực hiện hợp nhất / rebase giả định rằng bạn không phát triển trên nhánh chính cục bộ của mình. Cách dễ dàng để xử lý việc này là tạo một lực kéo ban đầu trước khi bạn bắt đầu viết mã, sau đó thực hiện tất cả công việc của bạn trên nhánh đó. Cách khó là phân nhánh nó ngay trước khi hợp nhất và khôi phục lại bản gốc.
Xác định phong cách mã hóa cho tổng thể dự án và làm cho các nhà phát triển tuân theo nó. Các nhà phát triển đóng góp nên viết mã tuân thủ các tiêu chuẩn / định mức của dự án để giảm thiểu việc dọn dẹp. Phong cách mã hóa có thể là một rào cản bản ngã lớn trong một dự án mở. Nếu không có tiêu chuẩn nào được đặt ra, mọi người sẽ viết mã theo kiểu ưa thích của riêng họ và cơ sở mã sẽ trở nên rất xấu rất nhanh.
Huyền thoại về "Tháng đàn ông huyền thoại"
Dù bạn có tin hay không, các dự án nguồn mở lớn hơn / thành công hơn không chạy như một nền dân chủ. Họ chạy như một hệ thống phân cấp. Nói rằng một dự án không thể phát triển hiệu quả ngoài 8-10 nhà phát triển là ngây thơ. Nếu đó là sự thật thì các dự án lớn như Linux Kernel sẽ không tồn tại. Vấn đề sâu xa hơn là việc cho phép mọi người truy cập cam kết chỉ khiến việc giao tiếp trở nên quá khó khăn để xử lý.
Vấn đề của tháng người đàn ông huyền thoại thực sự có thể được khắc phục. Bạn chỉ cần chạy dự án của bạn như quân đội. Có nhiều cấp độ trong hệ thống phân cấp vì kiến thức phổ biến rằng mỗi người thực sự chỉ hiệu quả trong việc quản lý thông tin liên lạc với một số ít người. Miễn là không một cá nhân nào chịu trách nhiệm quản lý công việc của hơn 5 - 7 người, hệ thống có thể mở rộng quy mô vô thời hạn.
Nó có thể hạn chế các nhà phát triển giỏi nhất / có kinh nghiệm thực hiện tích hợp nhiều hơn và thiết kế / lập kế hoạch cấp cao hơn nhưng đó không phải là điều xấu. Một phần của việc nhân rộng là làm cho việc di chuyển để quyết định rằng dự án cần một kế hoạch dài hạn. Những người ở cấp cao nhất có đầu tư lớn nhất (thời gian cũng là một nguồn lực) trong tương lai của các dự án nên được giao trách nhiệm đưa ra các quyết định lớn.
Thật tuyệt khi nghe về một dự án nguồn mở đang trải qua những cơn đau ngày càng tăng. Chúc mừng và chúc may mắn.