(다음은 내가 작업하고있는 소스 코드를 구성 할 때 발생하는 복잡성의 "이론적 MCVE"의 한 종류입니다. 구체적인 문제는 그것이 좋을 것입니다. 또는 제기되는 일반적인 우려 사항을 언급하고 해결 방법을 제안 할 수 있습니다.)복잡한 저장소 구조 관리 - 모듈 종속성 및 공유 코드
A, B, C 및 D 코드의 모듈이 있다고 가정하십시오. A는 B ,CD; B는 C에 의존한다. C, D는 다른 모듈에 의존하지 않습니다. (나는 "모듈"이라는 용어를 느슨하게 사용한다.
또한 A, B, C, D 모두에서 몇 개의 동일한 헤더 파일이 사용되며 컴파일 된 객체까지도 사용되며 이러한 파일을 함께 넣어 다섯 번째 모듈을 구성하는 것은 적절하지 않습니다. 너무 작고 쓸모 없을 것입니다. 이 카테고리에 속하는 파일 중 하나가 foo.h
입니다.
이러한 모듈은 모두 단일 모 놀리 식 코드 저장소에 보관되지만 모두 훌륭합니다. 정확히 모든 것이 하나의 사본입니다. 그래서 어떻게 버전 관리 저장소에 B의 각, C, D를 만들 수 있죠 : : 질문은
동일한 기능 등으로 컴파일 된 객체 사이에 링커 충돌하지
- 각 모듈은 서브 모듈/하위 리파지토리 또는 다른 방법으로 종속되는 모듈의 존재 여부만으로 빌드 할 수 있습니다. 및
- 같은 파일의 별도 버전을 유지 관리/업데이트하거나 한 라이브러리에서 다음 라이브러리로 이월 커밋을 할 필요가 없습니다 (지적한 수정 버전을 변경하는 경우 제외). 그리고
- A가 빌드 될 때 모두 빌드 될 때, 빌드는
foo.h
의 qudaruple 사본과 C의 이중 사본을 포함하지 않습니다 (A는 한 번, B는 한 번). 완벽하게 동기화됩니다.
더 많은 시간을 할애하면이 질문을 좀 더 구체적으로 만들 수 있습니다 (비록 광범위한 질문과 비슷 함). 내 구체적인 경우 코드가 현대 C++, CUDA, bash 스크립트 및 CMake 모듈이라고합니다. 자바 지향적 인 해결책은 그렇게하지 않을 것입니다.
전체 시스템을 컴파일하는 데 몇 시간이 걸립니까? 2 시간에서 3 시간이 지나면 서브 레 포스로 나누지 말아야한다고 생각합니다. –
@IanRingrose : 컴파일하는 데 몇 분이 걸리지 만 몇 시간이 걸리지 않습니다. 그러나 그 중 일부는 독립적으로 게시되었습니다 (하나 이상의 부분). 다른 사람들에 의해 각기 다른 부분에 작업을 분리하거나 다른 "모자"아래서 혼자서 작업하는 문제가 있습니다. – einpoklum
힘내는 서브 모듈을 가지고 있습니다. 서브 모듈을 통해 다른 저장소 내에서 하나의 저장소에 대한 특정 커밋을 참조 할 수 있습니다. (서브 모듈의 소스를 볼 수는 있지만, 점프를하지 않고 변경할 수는 없습니다.) 그것은 가치가있을 수 있습니다. 그래서 git 서브 모듈에 관해서는 많은 질문이 있습니다. –