¿Cómo funciona el repository de Android para manifestar el trabajo del repository?

La fuente de Android es una gran jerarquía de repositorys git . Son administrados por un script personalizado llamado repo . Repo determina qué repositorys git gestionar utilizando un file manifest.xml. El manifest.xml de Android está alojado en un repository git junto con todos los demás repositorys git.

¿Cómo se gestiona este repository en Android? Específicamente, ¿cómo se organizan las diferentes twigs y los diferentes files alojados en cada twig?

Primero, repo init crea el directory .repo , clona el repository git https://android.googlesource.com/tools/repo a .repo/repo , y el repository git especificado con la opción -u a un repository vacío en .repo/manifests.git . Después de eso, crea el directory .repo/manifests , lo convierte en un repository git mediante la creación de enlaces simbólicos desde .repo/manifests/.git a .repo/manifests.git . A continuación, verifica la twig especificada en -b y crea un enlace simbólico .repo/manifest.xml apunta al file especificado (opción -m ) en .repo/manifests , por defecto .repo/manifests/default.xml .

Aproximadamente de la siguiente manera:

   repo init -u $ URL -b $ BRANCH -m $ MANIFEST
   --------------------
   mkdir .repo;  cd .repo
   git clone https://android.googlesource.com/tools/repo
   git clone --bare $ URL manifiestats.git
   mkdir -p manifiesta / .git;  cd manifiesta / .git
   para mí en ../../manifests.git/*;  hacer ln -s $ ı;  hecho
   discos compactos ..
   git checkout $ SUCURSAL -.
   discos compactos ..
   ln -s manifiesta / $ MANIFEST manifiesta.xml  

Puedes rastrear lo que realmente sucede con repo --trace init ...

Luego, la synchronization de repository clona repositorys en .repo/projects para cada proyecto en manifest.xml y local_manifest.xml , crea directorys de trabajo con .git tiene enlaces simbólicos al repository desnudo correspondiente, verifica la twig especificada en el manifiesto y las actualizaciones .repo/project.list . El caso donde los proyectos ya están allí es ligeramente diferente, esencialmente realizando un git pull --rebase .

En la raíz del repository se encuentra un directory oculto llamado ".repo", en su interior encontrará un proyecto de git llamado "manifiestos" que generalmente contiene un file llamado "default.xml". Este file contiene información sobre todos los proyectos y dónde se encuentran sus repositorys git asociados. Este file también está versionado, por lo tanto, cuando utiliza el command "repo init -b XYZ", se revertirá y podrá volver a twigs anteriores que pueden haber agregado / eliminado proyectos de git en comparación con el encabezado.

Aquí hay un enlace al documento repo git repo que describe el formatting del manifiesto:

https://gerrit.googlesource.com/git-repo/+/master/docs/manifest-format.txt