2012-06-20 2 views
0

우리는 말뚝 박기 업 여러 프레임 워크/라이브러리가 프로젝트를합니다나란히 재귀 망할 놈의 서브 모듈 저희 회사에서

/Framework 
/Extensions (depends on Framework) 
/Business (depends on Framework & Extensions) 
/Project A (depends on Framework & Extensions & Business) 
/Project B (depends on Framework & Extensions & Business) 
/Project C (depends on Framework & Extensions & Business) 
/... 

을 지금까지 우리는 모든 프로젝트 및 프레임 워크를 포함하는 큰 자식 저장소를 사용하고, 우리는 git subtree을 사용하여 프레임 워크를 분할하여 공개합니다 (오픈 소스입니다).

우리는 다른 프로젝트의이 큰 저장소를 분할 할 수 싶지만 너무 많은 순환 종속성이 있다는 사실이 나에게 걱정 :

AFAIK, 두 자식 서브 모듈은/자식 하위 트리가 필요로하는 모든 라이브러리 코드 주요 저장소 안에, 그래서 우리는이 같은 프로젝트 구조로 끝날 것

/Framework 
/Extensions/Framework 
/Business/Extension/Framework 
/Project A/Business/Extensions/Framework 
/Project B/Business/Extensions/Framework 
/Project C/Business/Extensions/Framework 

우리는 모든 곳에서 프레임 워크의 많은 복사본을 가지고 좋아하지 않아, 어느 프레임 워크 폴더에 깊은 얻을 수 있다는 사실 계층 구조. 우리가 원하는 무엇

는 프로젝트 respository이 일부 SHA 들어있는 현재와 측면하여 저장소 측면, 그리고이 SHA을 확인하는 것으로, 풀에 주장이다.

사이드 바이 사이드 서브 모듈/서브 트리를 만드는 방법이 있습니까?

답변

0

개발 환경에 대해 설명하지는 않았지만 설명 된 내용은 Linux/usr/lib 및/usr/include의 종속성을 사용하여 코드를 개발하는 것과 전혀 다릅니다. 많은 프로젝트가 공유 라이브러리에 의존합니다. 해당 프로젝트를 실행 파일로 컴파일하려면 프로젝트가 의존하는 라이브러리 (프레임 워크 및 확장)의 안정 버전을 설치해야합니다.

프레임 워크, 확장 프로그램 및 비즈니스가 모두 안정적이라고 가정합니다 (또는 자주 업데이트되지 않는 경우도 있음). 자신의 개발 시스템에 이러한 '라이브러리'를 얻기 위해 모든 개발자에 의해 수행

cd /stable 
git checkout -b version-x.y /path/to/Framework.git 
git checkout -b version-x.y /path/to/Extensions.git 
git checkout -b version-x.y /path/to/Business.git 

: 당신은 같은 세 가지 체크 아웃이있을 것이다. 각 프로젝트에는이 라이브러리를 참조하는 빌드/메이크 지침이 있습니다. (참조는 절대적으로/stable/... 또는 'Project X'위치에 상대적 일 수 있습니다.) Extensions의 프레임 워크 및 비즈니스 의존성에 대한 확장 및 프레임 워크의 종속성과 유사합니다.

이 방법을 사용하면 각 클론 중 하나만 존재하지만 모든 종속성이 제자리에 있습니다.

[편집] 각 프로젝트가 의존하는 내용을 수정해야하는 경우 위의 내용은 작동하지 않습니다. 그렇다면 모든 것을 여러 번 복제하는 것을 피할 수는 없습니다. 사실 서브 모듈을 사용하여 복제를 수행하여 적절한 경우 한 프로젝트의 변경 사항을 마스터로 다시 병합 할 수 있습니다.

+0

불행히도 이러한 경우가 아니기 때문에 각 프로젝트에서 Framework, Extensions 및 Business를 계속 변경하고 (자체 지사에서 잠시 격리 됨)이 라이브러리의 변경 사항은 프로젝트간에 원활하게 이동한다는 점을 좋아합니다. 엄격한 버전을 가지고 있으며 쉽게 변경/디버깅 할 수 있습니다 (동일한 솔루션에 포함됨). – Olmo

+0

그런 다음 기본 솔루션은 서브 모듈을 사용하는 것입니다. 즉, 각 개발 시스템에 여러 개의 복사본이 있어야합니다. 이 경우 복사본이 있으면 이점이 있습니다. 각 프로젝트가 성공한 다음 변경 사항을 다시 병합 할 수 있습니다. – GoZoner