Во-первых, init repo создает каталог .repo
, клонирует репозиторий git https://android.googlesource.com/tools/repo в .repo/repo
и репозиторий git, указанный с параметром -u
, в пустой репозиторий на .repo/manifests.git
.После этого он создает каталог .repo/manifests
, преобразует его в репозиторий git, создавая символические ссылки от .repo/manifests/.git
до .repo/manifests.git
.Затем он проверяет ветку, указанную в -b
, и создает символическую ссылку .repo/manifest.xml
, указывающую на указанный файл (опция -m
) в .repo/manifests
, по умолчанию .repo/manifests/default.xml
.
Примерно так:
repo init -u $URL -b $BRANCH -m $MANIFEST
--------------------
mkdir .repo; cd .repo
git clone https://android.googlesource.com/tools/repo
git clone --bare $URL manifests.git
mkdir -p manifests/.git; cd manifests/.git
for i in ../../manifests.git/*; do ln -s $ı .; done
cd ..
git checkout $BRANCH -- .
cd ..
ln -s manifests/$MANIFEST manifest.xml
Вы можете проследить, что действительно происходит с repo --trace init ...
Затем репозитории репозиториев синхронизации репозиториев с .repo/projects
для каждого проекта вmanifest.xml
и local_manifest.xml
, создает рабочие каталоги с .git
, имеющие символические ссылки на соответствующий пустой репозиторий, проверяет ветку, указанную в манифесте, и обновляет .repo/project.list
.Случай, когда проекты уже есть, немного отличается, по сути, выполняя git pull --rebase
.