Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How does the Android repo manifest repository work?

The Android source is a large hierarchy of git repositories. They are managed by a custom script called repo. Repo determines which git repositories to manage using a manifest.xml. The manifest.xml of Android is hosted in a git repository along with all the other git repositories.

How is this repository managed in Android? Specifically how are the different branches and the different files hosted in each branch organised?

like image 336
Bjarke Freund-Hansen Avatar asked May 27 '11 08:05

Bjarke Freund-Hansen


People also ask

What does repo manifest do?

repo/manifests directory, converts it into a git repository through creating symbolic links from .

How do I create a local manifest?

To add to the contents of the default manifest, create a folder called local_manifests under the . repo directory, then create an XML file (text file with . xml extension) inside that directory. You can call the XML file anything you like, as long as it ends in .

What is local manifest?

The local manifest Creating a local manifest allows you to customize the list of repositories used in your copy of the source code by overriding or supplementing the default manifest. In this way, you can add, remove, or replace source code in the official manifest with your own.

What is repo command?

Repo complements Git by simplifying work across multiple repositories. See Source Control Tools for an explanation of the relationship between Repo and Git. For more details on Repo, see the Repo README.


1 Answers

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   

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.

like image 77
Pekka Nikander Avatar answered Oct 18 '22 00:10

Pekka Nikander