Android 소스를 mirror 해서 사용할때 manifest 파일을 수정해야 한다.
manifest 파일은 repo init 명령어에서 -m XXX_manifest.xml 의 옵션으로 지정할 수 있다.
특별히 지정하지 않는다면 default.xml 을 참조하게 된다.
현재 어느 파일을 참조하고 있는지를 보려면
$ cd .repo
$ ls -al
하면
lrwxrwxrwx 1 jason jason 21 2012-11-16 14:58 manifest.xml -> manifests/default.xml
manifest 파일의 내용에 대해 알아보자.
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<remote fetch="ssh://git-repo@ServerIP/mirror" name="somename" review="reviewserverIP"/>
<default remote="somename" revision="revisionName"/>
<project name="a/aosp/platform/external/alsa-lib" path="external/alsa-lib"/>
<project name="a/aosp/platform/external/alsa-utils" path="external/alsa-utils"/>
<project name="a/aosp/platform/external/crda" path="external/crda"/>
위와 같은 manifest 파일이 있다고 하자.
<remote fetch="ssh://git-repo@ServerIP/mirror" name="somename" review="reviewserverIP"/>
어느 서버에서 git repository 를 받아올 것인가를 지정하는 곳이다. 그리고 somename 을 지정하면 아래의 project 에서 remote="somename" 항목을 참조하여 해당 git repository 를 ServerIP 에서 다운 받도록 한다.
revisionName 은 branch name 이라고 이해하면 될것 같다. 다운받은 후 해당 branch 의 최신 소스로 HEAD 를 옮겨 놓는다.
<project name="a/aosp/platform/external/alsa-lib" path="external/alsa-lib"/>
project a/aosp/platform/external/alsa-lib 의 mirror repository 는 external/alsa-lib 에 다운 받는다는 얘기다.
이 항목이 아래와 같이 표시 되는 경우도 있다.
<project name="a/aosp/platform/external/alsa-lib" path="external/alsa-lib" revision="5225266cc................d60"/>
결론은 repo init 시 지정하는 manifest 파일에 따라서 repo sync 하고 난 후의 소스가 달라진다는 것이다.
manifest 파일의 설정을 잘 하면 repo sync 후 repo forall -c git checkout 같은 명령어를 쓰지 않아도 원하는 작업 branch 로 이동이 가능하다.
이상 끝.