web-dev-qa-db-fra.com

Comment fonctionne le référentiel de manifeste Android repo)?

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?

44

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.

63
Pekka Nikander

À 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

8
satur9nine