Documentation de référence sur les commandes Repo

Repo complète Git en simplifiant le travail sur plusieurs dépôts. Pour en savoir plus sur la relation entre Repo et Git, consultez Outils de gestion du code source. Pour en savoir plus sur Repo, consultez le fichier README de Repo

L'utilisation de Repo se présente comme suit :

repo command options

Les éléments facultatifs sont indiqués entre crochets []. Par exemple, de nombreuses commandes acceptent project-list comme argument. Vous pouvez spécifier project-list comme une liste de noms ou une liste de chemins d'accès aux répertoires sources locaux pour les projets :

repo sync [project0 project1 ... projectn]
repo sync [/path/to/project0 ... /path/to/projectn]

aide

repo help

Fournit de l'aide sur la commande repo. Vous pouvez afficher des informations détaillées sur une commande Repo spécifique en spécifiant une commande comme option :

repo help command

Par exemple, la commande suivante génère une description et une liste d'options pour la commande init :

repo help init

Pour afficher uniquement la liste des options disponibles pour une commande, exécutez la commande suivante :

repo command --help

Exemple :

repo init --help

init

repo init -u url [options]

Installe Repo dans le répertoire actuel. Cette commande crée un répertoire .repo/ avec des dépôts Git pour le code source Repo et les fichiers manifestes Android standards.

Options:

  • -u : spécifiez une URL à partir de laquelle récupérer un dépôt manifeste. Le manifeste commun se trouve à l'adresse https://android.googlesource.com/platform/manifest.

  • -m : sélectionnez un fichier manifeste dans le dépôt. Si aucun nom de manifeste n'est sélectionné, la valeur par défaut est default.xml.

  • -b : spécifiez une révision, c'est-à-dire un manifest-branch particulier.

synchroniser

repo sync [project-list]

Télécharge les nouvelles modifications et met à jour les fichiers de travail dans votre environnement local, ce qui revient à exécuter git fetch sur tous les dépôts Git. Si vous exécutez repo sync sans arguments, les fichiers de tous les projets sont synchronisés.

Lorsque vous exécutez repo sync, voici ce qui se passe :

  • Si le projet n'a jamais été synchronisé, repo sync équivaut à git clone. Toutes les branches du dépôt distant sont copiées dans le répertoire du projet local.

  • Si le projet a déjà été synchronisé, repo sync équivaut à :

    git remote update
    git rebase origin/branch
    

    branch est la branche extraite actuelle dans le répertoire du projet local. Si la branche locale ne suit pas une branche dans le dépôt distant, aucune synchronisation n'a lieu pour le projet.

Une fois l'exécution de repo sync réussie, le code des projets spécifiés est à jour et synchronisé avec le code du dépôt distant.

Options clés :

  • -c : récupère uniquement la branche manifeste actuelle à partir du serveur.
  • -d : rétablit la révision du manifeste pour les projets spécifiés. Cette option est utile si le projet se trouve sur une branche thématique, mais que la révision du manifeste est nécessaire temporairement.
  • -f : poursuit la synchronisation des autres projets même si un projet ne parvient pas à se synchroniser.
  • -j threadcount : divise la synchronisation entre les threads pour une exécution plus rapide. Veillez à ne pas surcharger votre machine. Laissez une partie du processeur réservée à d'autres tâches. Pour afficher le nombre de processeurs disponibles, exécutez d'abord nproc --all.
  • -q : exécute la commande en mode silencieux en supprimant les messages d'état.
  • -s : synchronise une version stable connue, comme spécifié par l'élément manifest-server dans le manifeste actuel.

Pour plus d'options, exécutez repo help sync.

upload

repo upload [project-list]

Importe les modifications sur le serveur d'examen. Pour les projets spécifiés, Repo compare les branches locales aux branches distantes mises à jour lors de la dernière synchronisation Repo. Repo vous invite à sélectionner une ou plusieurs branches qui n'ont pas été importées pour examen.

Tous les commits des branches sélectionnées sont ensuite transmis à Gerrit via une connexion HTTPS. Vous devez configurer un mot de passe HTTPS pour activer l'autorisation d'importation. Pour générer une nouvelle paire nom d'utilisateur/mot de passe à utiliser via HTTPS, accédez au générateur de mots de passe.

Lorsque Gerrit reçoit les données d'objet sur son serveur, il transforme chaque commit en modification afin que les examinateurs puissent commenter un commit spécifique. Pour combiner plusieurs commits de point de contrôle en un seul commit, utilisez git rebase -i avant d'exécuter l'importation.

Si vous exécutez repo upload sans arguments, tous les projets sont analysés pour détecter les modifications à importer.

Pour modifier les modifications après leur importation, utilisez un outil tel que git rebase -i ou git commit --amend pour mettre à jour vos commits locaux. Une fois vos modifications terminées :

  • Vérifiez que la branche mise à jour est la branche extraite actuelle.
  • Utilisez repo upload --replace PROJECT pour ouvrir l'éditeur de correspondance des modifications.
  • Pour chaque commit de la série, saisissez l'ID de modification Gerrit entre crochets :

    # Replacing from branch foo
    [ 3021 ] 35f2596c Refactor part of GetUploadableBranches to lookup one specific...
    [ 2829 ] ec18b4ba Update proto client to support patch set replacements
    # Insert change numbers in the brackets to add a new patch set.
    # To create a new change record, leave the brackets empty.
    

Une fois l'importation terminée, les modifications comportent un ensemble de correctifs supplémentaire.

Si vous ne souhaitez importer que la branche Git actuellement extraite, utilisez l'option --current-branch (ou --cbr en abrégé).

Pour les modifications associées, il est utile de conserver toutes les CL dans le même sujet. Vous pouvez ajouter un nom de sujet lors de l'importation avec --topic=TOPIC. Vous pouvez également transmettre -t pour définir le même nom de sujet que le nom de la branche locale.

différences

repo diff [project-list]

Affiche les modifications en attente entre le commit et l'arborescence de travail à l'aide de git diff.

télécharger

repo download target change

Télécharge la modification spécifiée à partir du système d'examen et la rend disponible dans le répertoire de travail local de votre projet.

Par exemple, pour télécharger la modification 23823 dans votre platform/build répertoire :

repo download platform/build 23823

L'exécution de repo sync supprime tous les commits récupérés avec repo download. Vous pouvez également extraire la branche distante à l'aide de git checkout m/main.

forall

repo forall [project-list] -c command

Exécute la commande shell donnée dans chaque projet. Les variables d'environnement supplémentaires suivantes sont mises à disposition par repo forall :

  • REPO_PROJECT est défini sur le nom unique du projet.
  • REPO_PATH est le chemin d'accès relatif à la racine du client.
  • REPO_REMOTE est le nom du système distant à partir du manifeste.
  • REPO_LREV est le nom de la révision du manifeste, traduit en branche de suivi locale. Utilisez cette variable si vous devez transmettre la révision du manifeste à une commande Git exécutée localement.
  • REPO_RREV est le nom de la révision du manifeste, tel qu'il est écrit dans le manifeste.

Options:

  • -c : commande et arguments à exécuter. La commande est évaluée via /bin/sh, et tous les arguments qui la suivent sont transmis en tant que paramètres positionnels du shell.
  • -p : affiche les en-têtes de projet avant la sortie de la commande spécifiée. Pour ce faire, les pipes sont liés aux flux stdin, stdout et sterr de la commande, et toute la sortie est redirigée vers un flux continu affiché dans une seule session de pagination.
  • -v : affiche les messages que la commande écrit dans stderr.

pruneaux

repo prune [project-list]

Supprime les sujets déjà fusionnés.

démarrer

repo start branch-name [project-list]

Démarre une nouvelle branche pour le développement, à partir de la révision spécifiée dans le manifeste.

L'argument BRANCH_NAME fournit une brève description de la modification que vous essayez d'apporter aux projets. Si vous ne le savez pas, envisagez d'utiliser le nom default.

L'argument project-list spécifie les projets qui participent à cette branche thématique.

état

repo status [project-list]

Compare l'arborescence de travail à la zone de préparation (index) et au commit le plus récent de cette branche (HEAD) dans chaque projet spécifié. Affiche une ligne récapitulative pour chaque fichier où il existe une différence entre ces trois états.

Pour afficher l'état de la branche actuelle uniquement, exécutez repo status .. Les informations d'état sont listées par projet. Un code à deux lettres est utilisé pour chaque fichier du projet.

Dans la première colonne, une lettre majuscule indique la différence entre la zone de préparation et le dernier état validé.

Lettre Signification Description
- Aucun changement Identique dans HEAD et l'index
A Ajouté Non présent dans HEAD, présent dans l'index
M Modifié Présent dans HEAD, modifié dans l'index
D Supprimé Présent dans HEAD, non présent dans l'index
R Renommé Non présent dans HEAD, chemin d'accès modifié dans l'index
C Copié Non présent dans HEAD, copié à partir d'un autre élément dans l'index
T Mode modifié Même contenu dans HEAD et l'index, mode modifié
U Fusion annulée Conflit entre HEAD et l'index ; résolution requise

Dans la deuxième colonne, une lettre minuscule indique la différence entre le répertoire de travail et l'index.

Lettre Signification Description
- Nouveau/inconnu Non présent dans l'index, présent dans l'arborescence de travail
m Modifié Présent dans l'index, présent dans l'arborescence de travail, modifié
d Supprimé Présent dans l'index, non présent dans l'arborescence de travail

Gérer les erreurs Repo

git commit -a # Commit local changes first so they aren't lost.
repo start branch-name # Start the branch
git reset --hard HEAD@{1} # And reset the branch so that it matches the commit before repo start
repo upload .

L'erreur repo: error: no branches ready for upload s'affiche lorsque la commande repo start n'a pas été exécutée au début de la session. Pour récupérer, vous pouvez vérifier l'ID de commit, démarrer une nouvelle branche, puis la fusionner.

Structure du dépôt Git

Pour Android, les dépôts Git (projets) ne sont pas imbriqués. Chaque projet est associé à un répertoire spécifique dans l'arborescence source, et tous les sous-répertoires et fichiers de ce répertoire font partie du même projet. Évitez d'utiliser la fonctionnalité git submodule de Repo pour le développement Android.