2007 2013 Kandroid
www.kandroid.org »
kandroid s/w fundamentals 교육 »
안드로이드 Platform 
▶ HTC Dream Platform Images
안드로이드 소스 저장소 복제 및 활용 가이드
작성자 브라이언
작성일 2009-05-13 (수) 16:13
ㆍ추천: 1  ㆍ조회: 10800      
IP: 221.xxx.182
<meta http-equiv="CONTENT-TYPE" content="text/html; charset=utf-8"> <meta name="GENERATOR" content="OpenOffice.org 2.4 (Linux)">
  1. 목적

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


  2. 준비 작업

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

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


  3. 복제 작업

    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


  4. 복제 저장소 사용하기

    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


이름아이콘 들풀
2009-05-13 22:30
브라이언님..너무 너무 좋은 글 감사드립니다..
최근에 봤던 글들중에서 가장 훌륭한 문서인 듯 합니다.
많은 분들에게 도움이 될 것이라 생각됩니다. 감사.!
   
이름아이콘 브라이언
2009-05-14 17:00
들풀님이 게시물 공지에 올려주셨네요. 감사! 회사 내부에서 안드로이드 소스 관리를 하기 위해 고민하면서 정리한 내용입니다. 여러 분들에게 도움이 되었으면 좋겠습니다. git 관련 웹 사이트와 구글 안드로이드 뉴스 그룹 포스팅을 많이 참조했습니다. 더 궁금한 내용이 있으면 댓글 올려주세요.
들풀 너무 훌륭한 글이어서 공지에 올렸습니다.
오히려 제가 감사드려야죠..~
5/14 17:01
   
이름아이콘 스팍
2009-05-22 10:41
복제하기위해서 용량이 얼마나 필요할까요?
   
이름아이콘 브라이언
2009-05-25 09:37
《Re》스팍 님 ,
통상 안드로이드 소스 전체 크기 만큼 필요하다고 보시면 됩니다. 2GB 용량에 추가로 2GB 용량을 더 확보해 놓으면 충분합니다.
   
이름아이콘 죠이
2009-07-02 18:38
브라이언님.
좋은 자료 감사합니다.

질문이 몇개 있습니다.
mirror 옵션으로 다운로드하면 working tree없이 repository만 가져오게 되는데
1. 회사 내부 서버에 여러 개발자가 push할 때의 conflict은 어떻게 해결하나요?
2. 안드로이드 서버에서 source를 update할 때도 내부 개발자가 반영한 사항과 conflict이 발생할 텐데 이는 어떻게 해결이 가능한가요.
   
 
덧글 쓰기 0
3500
※ 회원등급 레벨 0 이상 읽기가 가능한 게시판입니다.
    N     분류     제목    글쓴이 작성일 조회
안드로이드 소스 저장소 복제 및 활용 가이드 [5]+1 브라이언 2009-05-13 10800
110 추방되었던 안드로이드 커널 다시 들어온다. [3]+2 인베인 2010-04-19 8285
109 구글 안드로이드 플랫폼 분석 [12] 성공하자 2008-05-28 7025
108 Android용 Bluetooth solution [7] sandy 2010-05-04 6043
107 Android 2.0 Brief [6]+2 삼스 2009-12-01 6002
106 구글 안드로이드 - JNI : native binding to java [1] 들풀 2008-03-03 5990
105 pmem issue 문의 [6] 재호아빠 2008-12-02 5742
104 구글 안드로이드 - API 정리 들풀 2008-03-03 5699
103 안드로이드 에뮬레이터 Build [Linux] [1] 들풀 2008-03-03 5657
102 [인베인] Ramdisk.img 파일 압축해제 및 재압축 방법.. 들풀 2008-03-03 5483
101 Android Virtualization (KVM for ARM) [4]+2 인베인 2010-04-16 5436
100 구글 안드로이드 - 커널(kernel) Image Build & Replacement.. 들풀 2008-03-03 5402
99 Froyo 에서 i2c driver 의 suspend/resume 동작 [1]+1 손가락 2010-09-14 4825
98 [팁] 실제 하드웨어와 ADB 연결하기 [4] gana쪼꼬렛 2008-11-25 4808
97 구글폰(구글 안드로이드) - 시스템 해킹 들풀 2008-03-03 4777
96 OpenCore버젼 2.1으로 업데이트 [11] 인베인 2009-02-28 4710
1234567