Utiliser repo

Pourquoi utiliser l’outil repo lors d’un développement Android ?

Avec environ 8.5 millions de lignes de code (sans inclure le kernel Linux), conserver l’ensemble du code source d’Android dans un seul répertoire peut s’avérer difficile. Pour faciliter le développement par des partenaires OEMGoogle fournit un système de gestion de version reposant sous GIT, capable de :

  • définir un contrôle d’accès basé sur l’arborescence
  • créer des composants modulables (projets) et  substituables

Repo utilise un manifest listant un ensemble de dépôts GIT (projets). Ce manifest permet la fusion sous un seul workspace de plusieurs projets. Il n’a pas pour vocation à remplacer GIT car il se place au dessus. Repo a pour objectif principal de rendre le workflow plus facile.

Installer repo

Comme repo se place au dessus de GIT, il faut tout d’abord s’assurer que vous possèdez bien les outils GIT sur votre machine.

Repo a été écrit en python pour facilement s’interfaçer sur tout type de machine.

<code><span class="pln">$ mkdir </span><span class="pun">~</span><span class="str">/bin
$ PATH=~/</span><span class="pln">bin</span><span class="pun">:</span><span class="pln">$PATH</span></code>
<span class="pln">$ curl https</span><span class="pun">:</span><span class="com">//storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo</span><span class="pln">
$ chmod a</span><span class="pun">+</span><span class="pln">x </span><span class="pun">~</span><span class="str">/bin/</span><span class="pln">repo</span>

Les commandes fondamentales de repo

repo init

Cette commande installe repo dans le répertoire courant. Cela a pour effet de créer un dossier .repo qui contient les répertoires GIT d’Android. Le dossier .repo contient le fichier manifest.xml qui est un lien symbolique du fichier manifeste choisi par l’utilsateur (et qui se trouve également dans .repo/manifests)

repo init -u $URL -b $BRANCH -m $MANIFEST

Le script déroule les actions suivantes :

mkdir .repo
cd .repo
git clone 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 sync

Télécharge les nouveaux changements et met à jour les projets GIT.

Lorsque vous lancez cette commande, repo va dans un premier temps fetch l’ensemble des répertoires (clone si vous synchronisez pour la première fois) puis rebase et checkout chaque projet sur le dernier commit pointé dans le manifest.

L’option -c peut être utile dans le cas où  repo sync met du temps pour fetch l’ensemble des projets. L’option va uniquement fetch la branche courante définie dans le manifest.

repo status

Affiche les différences entre votre staging area et les commits sur la HEAD. Très utile pour savoir quels projets ont été modifiés et vont nécessiter des commits.

En gros, la commande va faire un git diff pour chaque projet enregistré dans le manifest.