2012-02-16 2 views
3

우리는 매우 큰 고대 CVS repo와 다음과 같은 예제 포맷을 가지고 있습니다. 나는 각 하위 디렉토리를 전체 역사를 가진 자체 자식 저장소로 가져 왔습니다. - 우리는 버전 태그와 각 라이브러리 및 프로그램 릴리스에 태그를'CVS era'repo를 하위 모듈과 함께 git repo로 변환하기

. 
├── prog1 
│   ├── liba 
│   └── libb 
├── prog2 
│   ├── libb 
│   └── libc 
└── prog3 
    ├── liba 
    └── libc 

를 CVS 트리의 일부를 태깅 수 있기 때문에 :

. 
├── liba 
├── libb 
├── libc 
├── prog1 
├── prog2 
└── prog3 

는 3 개 프로그램은 다음과 같은 방법으로 라이브러리를 사용하여 말할 수 있습니다. 예 : liba_4x23, prog3_2x22.

우리는 또한 릴리스에서 사용하는 라이브러리의 모든 버전과 프로그램에 태그를

(예 : liba_3x19libc_7x88)

우리는 도서관 태그하지 않고 프로그램의 새로운 버전을 출시 할 경우 - 태그는 프로그램의 초기 버전을 유지 그것은 사용되었습니다. 때문에 길을 이제
는 자식 가져 오기 작품 - 버전 - 실제로 (안 그 생각에 대해 걱정에) 프로그램의 최신 버전에 끝은

힘내 하위 모듈이를위한 아주 좋은 솔루션이 될 것 같다 프로그램을 체크 아웃 할 수 있고 라이브러리의 모든 올바른 버전을 서브 모듈로 가져옵니다.

현재 모든 프로그램이 서로 다른 라이브러리 릴리스에 있기 때문에 특정 버전의 하위 모듈을 다시 설치해야합니다.

  • prog1libb_4x50
  • prog2와 연결되어이 최신 버전은 다음 prog2의 예는 쉽게 libb_4x70

libb_4x70 가정으로되어 연결되어 libb 태그 추가하는 방법에 따라서

git checkout prog2 
cd prog2 
git submodule add libb 
.... done 

버전 (밀기울 아님) ched) 4x50 ~ prog1? 당신은 우리가 또한 수행 할 수 있습니다하면 다시 프로그램의 3 버전을 가서 각 버전에 적절한 서브 모듈을 설정입니다

:-) 더 나은 아이디어가 있다면

다른 조언에 감사드립니다. 이전 버전과의 호환성 및 작동 방식에 대한 관리의 예입니다.

답변

4

서브 모듈 아이디어 (explained here)는 상위 레포 내에 특정 커밋을 기록하는 것입니다.

그래서 당신은, libb를 추가 한 후 오른쪽 태그를 체크 아웃하기 만하고 부모의 repo에서 그 새로운 국가 기록 할 모든 :은 "분리 된 HEAD"코멘트 (

git checkout prog1 
cd prog1 
git submodule add libb 
cd lib 
git checkout libb_4x50 # make sure to make a branch 
         # if you want to do any modification 
         # based on libb_4x50, 
cd .. 
git add -A . 
git commit -m "fix correct libb version" 

을, "git submodule update * deletes uncommitted files"참조)

+0

감사합니다. "하위 모듈에 대한 아이디어는 부모 레포 내에 특정 커밋을 기록하는 것입니다." -이게 내가 원하는 결과 야. 그건 내가 생각했던 것보다 간단했다. –

관련 문제