AOSP의 mirror를 aosp-mirror 폴더에 땡긴다.
$ mkdir aosp-mirror
$ cd $_
$ repo init -u git://android.git.kernel.org/platform/manifest.git --mirror
$ repo sync -j40
다음 명령어로 프로젝트 리스트를 뽑아 gitosis등에 빈 저장소로 채워 둔다.
$ repo forall -c 'echo "[repo $REPO_PROJECT]"' > repo.list
이제 다음과 같은 스크립트를 만든다;
#/bin/bash
echo ""
echo "Starting update \"$1\"..."
echo "Pusing..."
git push --mirror gitosis@your.gitosis.address:$1.git
if [ "$?" = "0" ]; then
exit 0
else
echo $1 >> /home/suapapa/workspace/mirror-logs/aosp_fail_projects.list
fi
위 스크립트를 $PATH 밑에 push_mirror.sh 로 저장했다면 다음과 같이 전체 프로젝트를 gitosis 저장소에 업데이트 할 수 있다.
$ repo forall -c 'push_mirror.sh $REPO_PROJECT'
mirror 된 gitosis 저장소에 갱신된 내용, 추가된 branch 는 다음번 git push --mirror 할 때 사라져 버리므로, 작업용으로는 새 저장소를 만들어 clone해 써야 한다.
새 서버, remote 의 주소를 사용한 manifest 프로젝트를 만들어 다음과 같이 사용할 수 있다.
$ mkdir aosp; cd aosp
$ repo init -u gitosis@your.gitosis.address:android-manifests.git -b gingerbread
$ repo sync -j40
다른 repo 를 사용할 때도 아래와 같이 --reference 옵션을 사용하면 훨씬 빠르게 받을 수 있다.
$ mkdir cm7; cd cm7
$ repo init -u git://github.com/CyanogenMod/android.git -b gingerbread --reference=/home/suapapa/workspace/aosp/
$ repo sync -j40