Le source Android est un grande hiérarchie des référentiels git . Ils sont gérés par un script personnalisé appelé repo . Repo détermine les référentiels git à gérer à l'aide d'un manifest.xml. manifest.xml d'Android est hébergé dans un référentiel git avec tous les autres référentiels git.
Comment ce référentiel est-il géré dans Android? Plus précisément, comment les différentes branches et les différents fichiers hébergés dans chaque branche sont-ils organisés?
Tout d'abord, repo init crée le .repo
répertoire, clone le référentiel git https://Android.googlesource.com/tools/repo to .repo/repo
, et le référentiel git spécifié avec le -u
option vers un dépôt nu à .repo/manifests.git
. Après cela, il crée le .repo/manifests
, le convertit en un référentiel git en créant des liens symboliques à partir de .repo/manifests/.git
à .repo/manifests.git
. Il extrait ensuite la branche spécifiée dans -b
, et crée un lien symbolique .repo/manifest.xml
pointant vers le fichier spécifié (-m
option) dans .repo/manifests
, par défaut .repo/manifests/default.xml
.
À peu près comme suit:
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 ; les manifestes cd/.git pour i dans ../../manifests.git/*; faire ln -s $ ı.; terminé cd .. git checkout $ BRANCH -. cd .. ln -s manifestes/$ MANIFEST manifest.xml
Vous pouvez suivre ce qui se passe réellement avec repo --trace init ...
Ensuite, repo sync clones git repositories to .repo/projects
pour chaque projet dans manifest.xml
et local_manifest.xml
, crée des répertoires de travail avec .git
ayant des liens symboliques vers le référentiel nu correspondant, extrait la branche spécifiée dans le manifeste et met à jour .repo/project.list
. Le cas où les projets existent déjà est légèrement différent, réalisant essentiellement un git pull --rebase
.
À la racine du dépôt se trouve un répertoire caché nommé ".repo", à l'intérieur vous trouverez un projet git nommé "manifestes" qui contient généralement un fichier nommé "default.xml". Ce fichier contient des informations sur tous les projets et l'emplacement de leurs référentiels git associés. Ce fichier est également versionné ainsi lorsque vous utilisez la commande "repo init -b XYZ", il sera annulé et vous pourrez revenir aux anciennes branches qui peuvent avoir ajouté/supprimé des projets git par rapport à la tête.
Voici un lien vers le document repo git repo décrivant le format du manifeste:
https://gerrit.googlesource.com/git-repo/+/master/docs/manifest-format.txt