일부 VCS 시스템에서 저장소 가 보유한 제품의 코드베이스가 해당 코드베이스가 여러 제품을 포함하는 것으로 보일 수있는 지점으로 발전 하는 것이 일반적인 시나리오입니다 . 코드베이스를 여러 VCS 리포지토리 (각각 단일 제품 전용)로 분할하면 여러 가지 이점을 활용할 수 있습니다 ( 아래 의 팽창 저장소 모델 보다 VCS 리포지토리 당 제품이 갖는 이점 참조). 기술적 인 측면에서, 대부분의 VCS가이 작업을 지원하므로 코드베이스 분할은 다소 쉬운 단계입니다. 그러나 스플릿은 자동화 된 테스트, 지속적인 제공, 서비스 통합 또는 모니터링과 관련된 엔지니어링 문제를 야기 할 수 있습니다 ( 스 플리트가 제기 한 문제 참조).) 따라서 이러한 분할을 수행하려는 조직은 전달 및 모니터링 파이프 라인을 방해하지 않고 가능한 한 원활하게이 전환을 수행하는 방법을 알아야합니다. 이것의 첫 단계는 아마도 프로젝트 의 개념 과 모 놀리 식 코드베이스에서 분할을 묘사하는 방법을 더 잘 이해하는 것입니다 .
이 질문에 대한 답변에서 다음과 같은 내용을보고 싶습니다.
제품이 무엇인지에 대한 실제적인 정의를 제공하려는 시도로, 기존 코드베이스에서 실제로 제품을 묘사하는 실제 기준을 제공합니다.
이 작업 정의에 따르면 실제로 분할을 수행하는 계획을 정교화하십시오. 우리는 코드베이스가 연속 통합 및 연속 전달을 구현 하는 완전 자동화 된 sdlc에 의해 처리된다는 가정을 단순화 할 수 있습니다 . 즉, 각 코드는 현재 코드베이스에서 구현 된 자동화 된 테스트 슈트에 의해 유효성이 검사되며 각각의 "매직"브랜치에 병합되어 테스트되고 배포 된 제품 아티팩트 가 생성됩니다 . ( 제품 아티팩트 는 예를 들어 소스 타르볼, 문서, 이진 소프트웨어 패키지, Docker 이미지, AMI, 유니 커널입니다.)
그러한 계획은 그것을 우회하는 방법을 설명한다면 만족 스럽다
분할로 제기 된 문제
자동화 된 테스트 절차가 기존 단일 저장소 및 분할 저장소와 어떤 관련이 있습니까?
자동화 된 배포 절차가 기존의 모 놀리 식 리포지토리 및 분할 리포지토리와 어떤 관련이 있습니까?
자동 배포 절차 자체의 코드는 어디에 저장됩니까?
개발자가 한 번에 하나의 코드베이스 만 필요로하는 방법 (그러나 다른 코드베이스의 아티팩트를 사용할 수 있음)
git-bisect 와 같은 도구는 어떻게
한계 참고 사항 : 팽창 저장소 모델에 비해 VCS 저장소 당 제품을 갖는 이점
특정 제품에 대한 코드베이스를 보유하고있는 여러 개의 작은 저장소가 있으면 "팽창 저장소"접근법에 비해 다음과 같은 장점이 있습니다.
팽창 저장소를 사용하면 히스토리가 다른 제품 히스토리와 혼합되므로 제품이 불안정 할 때 릴리스를 롤백하기가 어렵습니다.
부풀린 저장소를 사용하면 프로젝트 히스토리 또는 풀을 검토하기가 어렵고 작은 저장소를 사용하면이 정보를 읽을 가능성이 높습니다. (이것은 git과 같은 VCS에만 해당 될 수 있습니다. svn과 달리 하위 트리를 체크 아웃 할 수 없습니다!)
팽창 저장소를 사용하면 개발할 때 훨씬 더 많은 분기 댄스를 수행해야합니다. N 리포지토리가있는 경우 N 개의 브랜치에서 병렬로 작업 할 수 있고, 하나의 리포지토리 만있는 경우 하나의 브랜치에서만 작업하거나 처리하기 어려운 작업 복사본이있을 수 있습니다.
여러 개의 작은 리포지토리가있는 경우 로그는 프로젝트의 히트 맵을 제공합니다. 그들은 심지어 개발 팀에서 지식 확산의 대리자로 사용될 수 있습니다 .3 개월 이후 repo X에 커밋하지 않으면 repo X 작업 팀에서 나를 개발에 대해 알고 있도록 할당하는 것이 좋을 수 있습니다 해당 구성 요소에서.
작은 리포지토리를 사용하면 구성 요소에 대한 명확한 개요를 얻는 것이 더 쉽습니다. 모든 것이 하나의 큰 저장소에 들어가면 각 구성 요소를 묘사하는 확실한 인공물이 없으며 코드베이스는 진흙의 큰 공을 향해 쉽게 표류 할 수 있습니다 .
소규모 리포지토리를 사용하면 구성 요소 간 인터페이스 작업을 수행 할 수 있습니다. 그러나 우리는 좋은 캡슐화를 원하기 때문에 어쨌든해야 할 일이므로 작은 저장소의 이점으로 간주합니다.
여러 개의 작은 리포지토리를 사용하면 여러 제품 소유자를 보유하는 것이 더 쉽습니다.
여러 개의 작은 리포지토리를 사용하면 전체 리포지토리와 관련되고 자동으로 확인할 수있는 간단한 코드 표준을 사용하는 것이 더 쉽습니다.