출처 : [KANDROID]

  • 목적 

    1. 회사 내부 서버에 안드로이드 소스 저장소를 복제한다
    2. 개발자들은 repo 명령으로 복제된 내부 저장소를 이용한다
    3. 회사 내부 cupcake 브랜치를 만들어 작업 내용을 관리한다


  • 준비 작업 

    1. 구글 안드로이드 오픈 소스 홈페이지를 참조해서 우분투 머신에 git와 repo를 설치한다명령어 path에 repo가 포함되게 설정한다.
    2. 여러 개의 내부 git 저장소를 관리하기 위해 gitosis를 설치한다. gitosis 설치 방법은 아래 페이지를 참조한다.
      http://scie.nti.st/2007/11/14/hosting-git-repositories-the-easy-and-secure-way 

    3. gitosis를 설치할 때 이름이 'git'인 사용자 계정을 만든다개발자마다 내부 서버에 계정을 만들지 않고 이 'git' 계정을 공유한다.
      물론 개별 접근을 제어할 수 있으며 이를 위해 ssh를 사용한다.


  • 복제 작업 

    1. 'git' 계정 저장소 폴더에 안드로이드 저장소를 위한 폴더를 만든다.
      > cd /home/git/repositories
      > sudo -u git mkdir android
      > cd android

    2. 구글 안드로이드 오픈 소스 메인 저장소를 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 

    3. 내부 cupcake 브랜치 레퍼런스를 복제한 저장소에 추가한다추가한 브랜치 레퍼런스는 master HEAD와 같은 위치를 참조한다.
      > sudo -H -u git repo forall -c 'git push /home/git/repositories/android/$REPO_PROJECT.git HEAD:refs/heads/local-cupcake' 

    4. 안드로이드 저장소 manifest 파일을 수정하기 위해 gitosis 설정을 변경해야한다. gitosis-admin/gitosis.conf 파일에 아래와 같은 내용을 추가한다.
      gitosis-admin/keydir/ 
      아래에는 brian 사용자의 ssh public key를 추가한다.
      [group android]
      writable = android/platform/manifest
      members = brian 

    5. 다른 우분투 머신에서 '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 

    6. default.xml 파일 내용 중 fetch 주소와 revision 레퍼런스를 아래와 같이 변경한다.
      fetch="git@localgit:android/"
      revision="local-cupcake"

    7. 변경한 내용을 commit 한 후 origin 저장소에 반영한다여기서 작업 내용은 master 브랜치가 아닌 local-cupcake 브랜치 아래에 올라간다.
      > git commit -a -m "Using local mirror"
      > git push 

    8. 안드로이드 저장소에 포함된 모든 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" 

    9. 주기적으로 구글 서버와 동기를 맞춘다.
      > cd /home/git/repositories/android
      > sudo -H -u git repo sync


  • 복제 저장소 사용하기 

    1. 개발자 개인 우분투 머신에서 repo 명령을 사용해 내부 서버로부터 소스를 가져올 수 있도록 변경된 manifest 파일을 받아온다.
      > mkdir localdroid
      > cd localdroid
      > repo init -u git@localgit:android/platform/manifest.git -b local-cupcake 

    2. 기존 소스 받는 것과 동일하게 repo sync로 소스를 가져온다.
      > repo sync 

    3. 내부 복제 서버에 미리 만들어 놓은 local-cupcake 브랜치로 작업이 진행되도록 설정한다.
      > repo start local-cupcake --all 

    4. 임의 폴더에서 소스를 수정한 후 내부 서버에 반영한다물론 작업 내용은 master 브랜치가 아닌 local-cupcake 브랜치 아래에 올라간다.
      > git commit ...
      > git push

  • 트랙백 주소 :: http://www.mirwing.com/122/trackback/
    옵션
    댓글 달기