하위 폴더 하나를 빼버리고 싶을때도 있고,
하위 폴더 하나를 또 다른 repository로 만들고 싶을 때도 있다.
위의 두개를 조합해서 sub repository로 경로를 분산하고자 할때도 있다.
이럴때, hg convert extension을 사용하면 된다.
http://mercurial.selenic.com/wiki/ConvertExtension
여기에 가면 할수 있는건 다 나와있다.
다만 영어에 약한 나는
[extensions]
hgext.convert=
에서 = 뒤에 뭔가가 더 붙어야 되리라 생각했다. 두시간을 찾았는데 없더라.
근데 걍 .hgrc에 저렇게만 쓰면 되더라. --;
convert에는 3개의 명령이 있다.
include 포함
exclude 제외
rename 이름 바꿔
내가 회사에서 했던 경우를 예를 들면
/MainLib
/3rdPartyLib
/ALib
/BLib
/CLib
이런 구조를 가진 MainLib이란 Repository가 있었고,
그 밑에 여러개가 있었으며, 3rdPartyLib이 있었다.
근데 3rdPartyLib가 워낙 덩치가 컸다.
빌드된 바이너리 파일들이 엄청 많았고, 헤더파일도 엄청 많았다.
부스트가 3개 버젼이나 있었다..
여기서 하고자 했던건
3rdPartyLib을 별도 Repository로 빼고
MainLib의 SubRepository로 만들고 싶었다.
마치 svn에서 external 한것처럼..
스텝을 나눠보면
1. 제외하고 다시 만들고 (제외)
2. 빼서 고것만 따로 만들고 (포함)
3. SubRepository로 지정하는 3단계 이다.
hg convert --filemap filemapfile source dest 로 사용한다.
여기서 filemapfile에 위에서 말한 3개의 명령이라는걸 줄수 있다.
filemapfile 이건 파일이다.
1. 3rdPartyLibf가 제외된 MainLib을 만든다.
echo exclude 3rdPartyLib > myfilemap
hg convert --filemap myfilemap MainLib ~~~/MainLib
2. 3rdPartyLib만을 포함한 3rdPartyLib를 만든다.
echo include 3rdPartyLib > myfilemap
echo rename 3rdPartyLib . >> myfilemap
hg convert --filemap myfilemap MainLib ~~~/3rdPartyLib
3.
cd ~~~/3rdPartyLib
hg serv
cd ~~~/MainLib
echo 3rdPartyLib = http://~~~~ > .hgsub
hg clone http://~~~~ 3rdPartyLib
hg add
hg ci
이렇게 하면 완성된다.
알사람만 알지라.
중요한 점은 .hgsub로 해놓고 clone을 받아오지 않으면,
다른곳에서 MainLib을 clone 해갈때 SubRepository를 빈 깡통으로 온다.
그리고, MainLib안에 있는 SubRepository는 따로 일일이 update, commit, push, pull 해줘야 한다.
extension중에 한번에 다 처리하는게 있긴 하지만, 뭐.. 회사에서 그걸 굳이 쓸 환경은 아니기 때문에,
사용해보지 않았다.
'Develop' 카테고리의 다른 글
lambda 호출시간? (0) | 2012.05.30 |
---|---|
lambda 메모리? (0) | 2012.05.30 |
Boost::any (0) | 2012.04.13 |
컴파일러 버젼 Define (0) | 2012.01.13 |
VisualStudio2010 Add-In : Dockable Form 띄우기 (0) | 2011.11.07 |