First, repo init creates the .repo directory, clones the git repository https://android.googlesource.com/tools/repo to .repo/repo, and the git repository specified with the -u option to a bare repository at .repo/manifests.git. After that, it creates the .repo/manifests directory, converts it into a git repository through creating symbolic links from .repo/manifests/.git to .repo/manifests.git. It then checks out the branch specified in -b, and creates a symbolic link .repo/manifest.xml pointing to the specified file (-m option) in .repo/manifests, by default .repo/manifests/default.xml.
Roughly as follows:
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版本, 现在的版本可能直接建立一个指向manifests.git的软链接就够了.)
You can trace what really happens with repo --trace init ...
Then, repo sync clones git repositories to .repo/projects for each project in manifest.xml and local_manifest.xml, creates working directories with .git having symlinks to the corresponding bare repository, checks out the branch specified in the manifest, and updates .repo/project.list. The case where the projects are already there is slightly different, essentially performing a git pull --rebase.
repoinit首先创建.repo目录,克隆repo工具仓库到.repo/repo,并将指定的git仓库克隆到.repo/manifests.git。然后它会把.manifests目录转化为git仓库,检出指定分支,并创建一个符号链接到manifest.xml。reposync则根据manifest.xml和local_manifest.xml克隆项目仓库,创建工作目录,检出分支并更新.project.list。如果项目已存在,则执行gitpull--rebase。
1万+

被折叠的 条评论
为什么被折叠?



