나는 아직 분산 버전 관리의 타오에서 자신을 다시 교육하기 위해 고군분투하는 또 다른 Subversion 사용자입니다.
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
+-project-+
+-bigImportantCustomer-+
| +-bespokeProjectOne
| +-bespokeProjectTwo
+-anotherImportantCustomer-+
+-anotherBespokeProject
아이디어는 저장소의 구조를 사용하여 엔지니어링 팀 간의 의사 소통을 구조화하는 데 도움이되었습니다. 비즈니스의 고객 대면 부분과 다양한 기타 이해 관계자 및 도메인 전문가.
재치 : "프로젝트"디렉토리 중 하나에있는 소스 문서는 한 번만 사용됩니다 (그리고 돈을 버는 것). "productLines"디렉토리 중 하나에있는 문서는 해당 특정 라인의 제품이 판매 될 때마다 여러 번 돈을받습니다. "라이브러리"디렉토리 중 하나에있는 문서는이를 사용하는 모든 제품이 판매되는 횟수만큼 돈을 벌 수 있습니다.
비용 상각 개념을 명시 적으로 작성하고 비즈니스 전체에서 소스 문서 재사용에 대한 지원을 구축하는 데 도움이됩니다.
또한 빌드 자동화 도구가 작동 할 수있는 공통 구조가 있음을 의미합니다. (빌드 스크립트는 소스 트리에서 각 구성 요소의 빌드 방법을 지정하는 구성 파일을 찾는 "빌드"폴더를 찾습니다. 문서 생성 및 테스트에서 유사한 프로세스가 발생합니다).
중요하게도 제가 일하는 제품은 일반적으로 성능 측정 및 특성화 테스트를 실행하는 데 오랜 시간이 걸립니다. 20 내지 200 시간; 몇 GB에서 수 TB의 처리 된 테스트 결과 / 중간 데이터 (시간이 지남에 따라 성능 향상을 측정 할 수 있도록 특정 시스템 구성에 저장 및 연결되어야 함)를 생성합니다. 이 문제는 구성 관리를 중요한 고려 사항으로 만들고 일반적으로 성능 측정 및 특성 테스트를 실행하는 데 필요한 계산 리소스가 제한되어 있기 때문에 중앙 집중화에 대한 일부 요구 사항을 부과합니다. (64-128 코어의 작은 클러스터).
하나의 마지막 메모로; 지속적인 통합 시스템은 빌드를 트리거해야한다는 것을 알고 있습니다. 정적 분석; 스모크 테스트 및 단위 테스트는 트렁크가 수정 될 때마다, "태그"분기가 수정 될 때마다, 그리고 "AUTOMATED"분기 분기가 수정 될 때마다 실행됩니다. 이러한 방식으로 개별 개발자는 중요한 기능인 IMHO와 같은 개인 지사와 함께 CI 시스템을 사용할 수 있습니다.
자, 여기 내 질문이 있습니다 : Mercurial을 사용하여 위의 모든 것을 복제하고 가능한 경우 향상시킬 수 있습니까?
--편집하다:
나의 현재 생각은 전체 구조를 정의하기 위해 중앙 Subversion Repository를 사용하는 것이지만 hg를 클라이언트로 사용하여 개발자가 로컬에서 repos를 사용할 수 있도록하는 것입니다.