과거에는 Subversion 리포지토리를 사용하여 소스 문서를 저장했으며 리포지토리 조직에 대한 "프로젝트 마이너"규칙을 따랐습니다. 이는 크고 작은 조직 모두에서 매우 잘 작동하는 것으로 나타났습니다.
우리는 저장소 브랜치를 구성 할 것입니다. 다음과 같이 태그 및 트렁크 :
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-+
| +-build
| +-doc
| +-test
+-project-+
+-bigImportantCustomer-+
| +-bespokeProjectOne
| +-bespokeProjectTwo
+-anotherImportantCustomer-+
+-anotherBespokeProject
아이디어는 저장소의 구조를 사용하여 엔지니어링 팀 간의 의사 소통을 구조화하는 데 도움이되었습니다. 비즈니스의 고객 대면 부분과 다양한 기타 이해 관계자 및 도메인 전문가.
재치 : "프로젝트"디렉토리 중 하나에있는 소스 문서는 한 번만 사용됩니다 (그리고 돈을 버는 것). "productLines"디렉토리 중 하나에있는 문서는 해당 특정 라인의 제품이 판매 될 때마다 여러 번 돈을받습니다. "라이브러리"디렉토리 중 하나에있는 문서는이를 사용하는 모든 제품이 판매되는 횟수만큼 돈을 벌 수 있습니다.
비용 상각 개념을 명시 적으로 작성하고 비즈니스 전체에서 소스 문서 재사용에 대한 지원을 구축하는 데 도움이됩니다.
이상적인 세상에서 비즈니스의 일부에 직면 한 고객은이 구조를 사용하여 프리젠 테이션 및 기타 영업 자료를 저장하므로 개발자는 관련 제품 디렉토리와 함께 고객의 기대치가 무엇인지 확인할 수 있으며 고객이 직면 한 동료는 개발을 추적 할 수 있습니다 그들이 판매하는 기능과 제품에 대한 진행.
또한 빌드 자동화 도구가 작동 할 수있는 공통 구조가 있음을 의미합니다. (빌드 스크립트는 소스 트리에서 각 구성 요소의 빌드 방법을 지정하는 구성 파일을 찾는 "빌드"폴더를 찾습니다. 문서 생성 및 테스트에서 유사한 프로세스가 발생합니다). 다시, 이상적인 세상에서, 조직의 웹 사이트와 다른 마케팅 자료는 같은 방식으로 구축 될 수 있습니다.
하나의 마지막 메모로; 지속적인 통합 시스템은 빌드를 트리거해야한다는 것을 알고 있습니다. 정적 분석; 스모크 테스트 및 단위 테스트는 트렁크가 수정 될 때마다, "태그"분기가 수정 될 때마다, 그리고 "AUTOMATED"분기 분기가 수정 될 때마다 실행됩니다. 이러한 방식으로 개별 개발자는 중요한 기능인 IMHO와 같은 개인 지사와 함께 CI 시스템을 사용할 수 있습니다.