상세 컨텐츠

본문 제목

Android source mirror 하는 방법

Study/GIT

by 휀스 2012. 11. 12. 14:34

본문


회사에서 Mirror 운영을 할 일이 생겨서 삽질하며 알아낸 Android source mirror 하는 방법


Android 원본 소스를 Mirror 해서 사용할 경우


Server 에서 Sync 하는 방법


Mirroring 할 Folder를 만든다.


계정은 git-repo 이고 git-repo 아래 repositories 폴더에서 시작한다.

이유는 gitolite 설치가 되어 있고 repository 관리를 /home/git-repo/repositories/ 아래에서 하도록 설정하였기 때문이다.


$ mkdir mirror-repo

$ cd mirror-repo


안드로이드 소스를 --mirror 옵션으로 받는다.


$ sudo -H -u git repo init -u git://android.git.kernel.org/platform/manifest.git --mirror

$ sudo -H -u git repo sync 


적당한 branch 이름(local-branch)이 HEAD를 가리키도록 변경한다. (중요)


$ sudo -H -u git repo forall -c 'git push /home/git-repo/repositories/mirror-repo/$REPO_PROJECT.git HEAD:refs/heads/local-branch' 


gitolite 나 gitosis 같은 tool 을 사용한다면 해당 tool에 일반 사용자의 Permission 을 추가한다.


gitolite 의 경우


/home/gitolite/repositories/gitolite-admin/keydir/ 아래 public ssh key 를 copy 하고

/home/gitolite/repositories/gitolite-admin/conf/gitolite-conf 파일에 permission 을 추가한다.


Repo @android

    RW+ = jason userid



@android 는 android 소스 내의 모든 git repository 경로이다. (개별적으로 만들어 줘야한다.)


$ sudo -H -u git find . -type d -name "*.git"


를 사용해서 repository 목록을 생성할 수 있다.


@android = mirror-repo/a/bsp/bootable/droidboot

@android = @andoird mirror-repo/a/bsp/external/al

@android = @andoird mirror-repo/a/bsp/internal/cd


의 형식으로 만들어서 /home/gitolite/repositories/gitolite-admin/conf/git-list.conf 파일로 저장하고

/home/gitolite/repositories/gitolite-admin/conf/gitolite.conf 파일 내부에

include 시켜주면 된다.


manifest.git 을 clone 한다. (이유는 mirror 로 받은 source 는 working copy 가 아니기 때문.)


$ git clone ssh://git-repo@serverIP/mirror-repo/manifest

$ cd manifest

$ git branch --track local-branch origin/local-branch

$ git checkout local-branch


이미 local-branch 상태이나 다시한번 git checkout 으로 확실하게 branch 이동


--track 옵션은 remote branch 를 간단하게 사용하기 위해 쓰는 명령이라 보면 될것 같다.


그리고 default.xml 파일을 수정한다.


fetch="xxxx@xxxx/" 라고 쓰여진 부분을 fetch="ssh://git-repo@serverIP/mirror-repo" 라고 변경해주면 된다.

주의할 점은 fetch 부분이 여러곳일 경우가 있다 이때 모두다 변경해줘야 한다는 것이다.

안그러면 나중에 push 할때 android server 에 push 하려고 삽질한다.


$ git commit -a -m "change url"

$ git push


이제 모든 준비가 끝났다.


그리고 서버에서 repo sync 를 필요할 때 마다 해주면 된다.



Client 가 sync 하는 방법


yourid@yourpc:~$ mkdir newsrc

yourid@yourpc:~$ cd newsrc

yourid@yourpc:~/newsrc$ repo init -u ssh://git-repo@serverIP/mirror-repo/manifest -b local-branch

yourid@yourpc:~/newsrc$ repo sync -j8

yourid@yourpc:~/newsrc$ repo start local-branch --all


여기 내용중 궁금한 사항은 댓글 남기시면 아는만큼만 답변 해 드립니다. ^^




관련글 더보기