출처 :  http://foris.tistory.com/110



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


이렇게 soft link 로 어느파일인지 표시되어 있다.


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"/>


이 경우는 git 의 특정 revision의 commit 으로 다운을 받고 HEAD를 옮긴다는 얘기다.

결론은 repo init 시 지정하는 manifest 파일에 따라서 repo sync 하고 난 후의 소스가 달라진다는 것이다.


manifest 파일의 설정을 잘 하면 repo sync 후 repo forall -c git checkout 같은 명령어를 쓰지 않아도 원하는 작업 branch 로 이동이 가능하다.


이상 끝.