Trước đây, tôi đã sử dụng kho Subversion để lưu trữ tài liệu nguồn của mình và tuân theo quy ước "dự án nhỏ" cho tổ chức kho lưu trữ, mà tôi đã thấy hoạt động rất tốt cho cả các tổ chức lớn và nhỏ.
Chúng tôi sẽ cấu trúc các chi nhánh kho lưu trữ của chúng tôi; thẻ & thân cây như sau:
branches-+
+-personal-+
| +-alice-+
| | +-shinyNewFeature
| | +-AUTOMATED-+
| | +-shinyNewFeature
| +-bob-+
| +-AUTOMATED-+
| +-bespokeCustomerProject
+-project-+
+-shinyNewFeature
+-fixStinkyBug
tags-+
+-m20110401_releaseCandidate_0_1
+-m20110505_release_0_1
+-m20110602_milestone
trunk
Trong chính cây nguồn thực tế, chúng ta sẽ sử dụng (một cái gì đó giống như) cấu trúc sau:
(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-+
| +-build
| +-doc
| +-test
+-project-+
+-bigImportantCustomer-+
| +-bespokeProjectOne
| +-bespokeProjectTwo
+-anotherImportantCustomer-+
+-anotherBespokeProject
Ý tưởng là (và vẫn là) sử dụng cấu trúc của kho lưu trữ để giúp cấu trúc giao tiếp giữa nhóm kỹ sư; bộ phận khách hàng của doanh nghiệp và các bên liên quan khác & các chuyên gia tên miền.
Để dí dỏm: Các tài liệu nguồn nằm trong một trong các thư mục "dự án" chỉ được sử dụng (và kiếm tiền) một lần. Các tài liệu nằm trong một trong các thư mục "sản phẩm" kiếm được tiền nhiều lần khi một sản phẩm từ dòng cụ thể đó được bán. Các tài liệu nằm trong một trong các thư mục "thư viện" kiếm được tiền gấp nhiều lần bất kỳ sản phẩm nào sử dụng chúng được bán.
Nó làm cho khái niệm khấu hao chi phí rõ ràng và giúp xây dựng hỗ trợ cho việc tái sử dụng tài liệu nguồn trên toàn doanh nghiệp.
Trong một thế giới lý tưởng, khách hàng phải đối mặt với một phần của doanh nghiệp cũng sẽ sử dụng cấu trúc này để lưu trữ các bài thuyết trình và tài sản bán hàng khác, để các nhà phát triển có thể thấy những kỳ vọng của khách hàng đã được tạo ra, ngay bên cạnh thư mục sản phẩm có liên quan và các đồng nghiệp phải đối mặt với khách hàng có thể theo dõi sự phát triển tiến bộ về các tính năng và sản phẩm mà họ đang bán.
Điều đó cũng có nghĩa là có một cấu trúc chung mà các công cụ tự động hóa xây dựng của chúng tôi có thể vận hành. (Các tập lệnh xây dựng của chúng tôi đi trên cây nguồn tìm kiếm các thư mục "xây dựng" trong đó chúng tìm thấy các tệp cấu hình chỉ định cách thức từng thành phần được xây dựng; một quá trình tương tự xảy ra để tạo và kiểm tra tài liệu). Một lần nữa, trong một thế giới lý tưởng, trang web của tổ chức và các tài sản tiếp thị khác có thể được xây dựng theo cùng một cách.
Như một lưu ý cuối cùng; hệ thống tích hợp liên tục biết rằng nó cần kích hoạt một bản dựng; phân tích tĩnh; kiểm tra khói & kiểm tra đơn vị chạy mỗi lần thân cây được sửa đổi, mỗi lần bất kỳ nhánh "thẻ" nào được sửa đổi và mỗi lần bất kỳ nhánh nhánh "TỰ ĐỘNG" nào được sửa đổi. Bằng cách này, các nhà phát triển cá nhân có thể sử dụng hệ thống CI với các chi nhánh cá nhân của họ, một khả năng quan trọng, IMHO.