Workflow de contrôle des sources

Pour travailler avec le code Android, vous avez besoin de Git, un système de contrôle des versions Open Source , et de Repo, un outil de gestion des dépôts conçu par Google qui s'exécute sur Git. Pour obtenir une explication de la relation entre Repo et Git, ainsi que des liens vers la documentation d'assistance de chaque outil, consultez Outils de contrôle des sources.

Flow

Le développement Android implique le workflow de base suivant :

  1. Démarrez une nouvelle branche de sujet à l'aide de repo start.
  2. Modifiez les fichiers.
  3. Mettez en scène les modifications à l'aide de git add.
  4. Validez les modifications à l'aide de git commit.
  5. Importez les modifications sur le serveur d'examen à l'aide de repo upload.

Tâches

L'utilisation de Git et de Repo dans les dépôts de code Android implique d'effectuer les tâches courantes suivantes.

Commande Description
repo init Initialise un nouveau client.
repo sync Synchronise le client avec les dépôts.
repo start Démarre une nouvelle branche.
repo status Affiche l'état de la branche actuelle.
repo upload Importe les modifications sur le serveur d'examen.
git add Met en scène les fichiers.
git commit Valide les fichiers mis en scène.
git branch Affiche les branches actuelles.
git branch [branch] Crée une branche de sujet.
git checkout [branch] Bascule HEAD vers la branche spécifiée.
git merge [branch] Fusionne [branch] dans la branche actuelle.
git diff Affiche la différence entre les modifications non mises en scène.
git diff --cached Affiche la différence entre les modifications mises en scène.
git log Affiche l'historique de la branche actuelle.
git log m/[codeline].. Affiche les commits qui ne sont pas envoyés.

Pour en savoir plus sur l'utilisation de Repo pour télécharger la source, consultez Télécharger la source et la documentation de référence sur la commande Repo.

Synchroniser les clients

Pour synchroniser les fichiers de tous les projets disponibles :

repo sync

Pour synchroniser les fichiers des projets sélectionnés :

repo sync PROJECT0 PROJECT1 ... PROJECTN

Créer des branches de sujet

Démarrez une branche de sujet dans votre environnement de travail local chaque fois que vous commencez une modification, par exemple lorsque vous commencez à travailler sur un bug ou une nouvelle fonctionnalité. Une branche de sujet n'est pas une copie des fichiers d'origine. Il s'agit d'un pointeur vers un commit spécifique, ce qui rend la création de branches locales et le basculement entre elles une opération légère. En utilisant des branches, vous pouvez isoler un aspect de votre travail des autres. Pour lire un article intéressant sur l'utilisation des branches de sujet, consultez Séparer les branches de sujet.

Pour démarrer une branche de sujet à l'aide de Repo, accédez au projet et exécutez la commande suivante :

repo start BRANCH_NAME .

Le point de fin ( .) représente le projet dans le répertoire de travail actuel.

Pour vérifier que la nouvelle branche a été créée :

repo status .

Utiliser des branches de sujet

Pour attribuer la branche à un projet spécifique :

repo start BRANCH_NAME PROJECT_NAME

Pour obtenir la liste de tous les projets, consultez android.googlesource.com. Si vous avez déjà accédé au répertoire du projet, utilisez simplement un point pour représenter le projet actuel.

Pour passer à une autre branche dans votre environnement de travail local :

git checkout BRANCH_NAME

Pour afficher la liste des branches existantes :

git branch

ou

repo branches

Les deux commandes renvoient la liste des branches existantes, le nom de la branche actuelle étant précédé d'un astérisque (*).

Mettre en scène des fichiers

Par défaut, Git remarque les modifications que vous apportez à un projet, mais ne les suit pas. Pour indiquer à Git de conserver vos modifications, vous devez les marquer ou les mettre en scène pour les inclure dans un commit.

Pour mettre en scène des modifications :

git add

Cette commande accepte des arguments pour les fichiers ou les répertoires du répertoire du projet. Malgré son nom, git add n'ajoute pas seulement des fichiers au dépôt Git. Elle peut également être utilisée pour mettre en scène des modifications et suppressions de fichiers.

Afficher l'état du client

Pour afficher l'état des fichiers :

repo status

Pour afficher les modifications non validées (modifications locales non marquées pour le commit) :

repo diff

Pour afficher les modifications validées (modifications locales marquées pour le commit), assurez-vous que vous vous trouvez dans le répertoire du projet, puis exécutez git diff avec l'argument cached :

cd ~/WORKING_DIRECTORY/PROJECT
git diff --cached

Valider des modifications

Un commit est l'unité de base du contrôle des révisions dans Git. Il se compose d'un instantané de la structure du répertoire et du contenu des fichiers pour l'ensemble du projet. Utilisez cette commande pour créer un commit dans Git :

git commit

Lorsque vous êtes invité à saisir un message de commit, fournissez un message court (mais utile) pour les modifications envoyées à AOSP. Si vous n'ajoutez pas de message de commit, le commit échoue.

Importer des modifications dans Gerrit

Mettez à jour la dernière révision, puis importez la modification :

repo sync
repo upload

Ces commandes renvoient une liste des modifications que vous avez validées et vous invitent à sélectionner les branches à importer sur le serveur d'examen. S'il n'y a qu'une seule branche, une simple y/n invite s'affiche.

Résoudre les conflits de synchronisation

Si la commande repo sync renvoie des conflits de synchronisation :

  1. Affichez les fichiers qui ne sont pas fusionnés (code d'état = U).
  2. Modifiez les régions en conflit si nécessaire.
  3. Accédez au répertoire du projet concerné. Ajoutez et validez les fichiers concernés, puis rebasez les modifications :
    git add .
    git commit
    git rebase --continue
    
  4. Une fois le rebasage terminé, relancez la synchronisation complète :
    repo sync PROJECT0 PROJECT1 ... PROJECTN
    

Nettoyer les clients

Après avoir fusionné les modifications dans Gerrit, mettez à jour votre répertoire de travail local, puis utilisez repo prune pour supprimer en toute sécurité les branches de sujet obsolètes :

repo sync
repo prune

Supprimer des clients

Étant donné que toutes les informations d'état sont stockées dans votre client, il vous suffit de supprimer le répertoire de votre système de fichiers :

rm -rf WORKING_DIRECTORY

La suppression d'un client supprime définitivement toutes les modifications que vous n'avez pas importées pour examen.