목적
- 회사 내부 서버에 안드로이드 소스 저장소를 복제한다.
- 개발자들은 repo 명령으로 복제된 내부 저장소를 이용한다.
- 회사 내부 cupcake 브랜치를 만들어 작업 내용을 관리한다.
준비 작업
- 구글 안드로이드 오픈 소스 홈페이지를 참조해서 우분투 머신에 git와 repo를 설치한다. 명령어 path에 repo가 포함되게 설정한다.
- 여러 개의 내부 git 저장소를 관리하기 위해 gitosis를 설치한다. gitosis 설치 방법은 아래 페이지를 참조한다.
http://scie.nti.st/2007/11/14/hosting-git-repositories-the-easy-and-secure-way
- gitosis를 설치할 때 이름이 'git'인 사용자 계정을 만든다. 개발자마다 내부 서버에 계정을 만들지 않고 이 'git' 계정을 공유한다.
물론 개별 접근을 제어할 수 있으며 이를 위해 ssh를 사용한다.
복제 작업
- 'git' 계정 저장소 폴더에 안드로이드 저장소를 위한 폴더를 만든다.
> cd /home/git/repositories
> sudo -u git mkdir android
> cd android
- 구글 안드로이드 오픈 소스 메인 저장소를 mirror 옵션을 사용해서 다운로드 한다. mirror 옵션은 저장소만 가져오고 working copy를 만들지 않는다.
> sudo -H -u git repo init -u git://android.git.kernel.org/platform/manifest.git --mirror
> sudo -H -u git repo sync
- 내부 cupcake 브랜치 레퍼런스를 복제한 저장소에 추가한다. 추가한 브랜치 레퍼런스는 master HEAD와 같은 위치를 참조한다.
> sudo -H -u git repo forall -c 'git push /home/git/repositories/android/$REPO_PROJECT.git HEAD:refs/heads/local-cupcake'
- 안드로이드 저장소 manifest 파일을 수정하기 위해 gitosis 설정을 변경해야한다. gitosis-admin/gitosis.conf 파일에 아래와 같은 내용을 추가한다.
gitosis-admin/keydir/ 아래에는 brian 사용자의 ssh public key를 추가한다.
[group android]
writable = android/platform/manifest
members = brian
- 다른 우분투 머신에서 'manifest' git 저장소를 복제한다. 내부 git 서버 이름을 localgit로 가정한다.
> cd ~
> git clone git@localgit:android/platform/manifest.git
> cd manifest
> git branch –track local-cupcake origin/local-cupcake
> git checkout local-cupcake
- default.xml 파일 내용 중 fetch 주소와 revision 레퍼런스를 아래와 같이 변경한다.
fetch="git@localgit:android/"
revision="local-cupcake"
- 변경한 내용을 commit 한 후 origin 저장소에 반영한다. 여기서 작업 내용은 master 브랜치가 아닌 local-cupcake 브랜치 아래에 올라간다.
> git commit -a -m "Using local mirror"
> git push
- 안드로이드 저장소에 포함된 모든 git 저장소 이름을 gitosis 설정에 추가한다. 또한 사용자 마다 ssh public key도 같이 gitosis 설정에 포함시켜 줘야 한다.
[group android]
writable = android/kernel/common android/platform/prebuilt android/platform/external/netcat android/platform/external/netperf android/platform/external/aes ...
members = brian jack lewis ...
모든 git 저장소 이름을 얻어내는 방법
> cd /home/git/repositories
> sudo -H -u git find . -type d -name "*.git"
- 주기적으로 구글 서버와 동기를 맞춘다.
> cd /home/git/repositories/android
> sudo -H -u git repo sync
복제 저장소 사용하기
- 개발자 개인 우분투 머신에서 repo 명령을 사용해 내부 서버로부터 소스를 가져올 수 있도록 변경된 manifest 파일을 받아온다.
> mkdir localdroid
> cd localdroid
> repo init -u git@localgit:android/platform/manifest.git -b local-cupcake
- 기존 소스 받는 것과 동일하게 repo sync로 소스를 가져온다.
> repo sync
- 내부 복제 서버에 미리 만들어 놓은 local-cupcake 브랜치로 작업이 진행되도록 설정한다.
> repo start local-cupcake --all
임의 폴더에서 소스를 수정한 후 내부 서버에 반영한다. 물론 작업 내용은 master 브랜치가 아닌 local-cupcake 브랜치 아래에 올라간다.
> git commit ...
> git push




