Ответ 1
Во-первых, repo init создает каталог .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 sync клонирует репозитории git в .repo/projects
для каждого проекта в manifest.xml
и local_manifest.xml
, создает рабочие каталоги с .git
, имеющие символические ссылки в соответствующий голый репозиторий, проверяет ветвь, указанную в манифест и обновления .repo/project.list
. Случай, когда проекты уже существуют, несколько отличается, по существу выполняя git pull --rebase
.