회사에서 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
여기 내용중 궁금한 사항은 댓글 남기시면 아는만큼만 답변 해 드립니다. ^^
repo init / repo sync 에 사용되는 manifest.xml 파일에 대한 설명 (2) | 2012.11.16 |
---|---|
android repository mirror 운영시 local branch 사용 (0) | 2012.11.15 |
gitolite 에서 git push 되지 않을때 (3) | 2012.11.07 |
Gitolite gitolite.conf 설명 (1) | 2012.11.02 |
GITLAP 설치 (GITLAB install) 및 사용법 (1/2) (0) | 2012.10.19 |