Referencia de comandos de Repo

Repo complementa a Git facilitando el trabajo entre varios repositorios. Puedes obtener una explicación de la relación entre Repo y Git en Herramientas de control de fuente. Para obtener más información sobre Repo, consulta el archivo README de Repo.

El uso de Repo es el siguiente:

repo command options

Los elementos opcionales se muestran entre corchetes [ ]. Por ejemplo, muchos comandos toman project-list como argumento. Puedes especificar project-list como una lista de nombres o una lista de rutas a directorios del código fuente local para los proyectos:

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

help

repo help

Ofrece ayuda con el comando repo. Para ver información detallada sobre un comando específico de Repo, establece el comando como una opción:

repo help command

Por ejemplo, el siguiente comando muestra una descripción y una lista de opciones para el comando init:

repo help init

Por otro lado, si solo quieres ver la lista de opciones disponibles para un comando, ejecuta lo siguiente:

repo command --help

Por ejemplo:

repo init --help

init

repo init -u url [options]

Instala Repo en el directorio que estás usando. De esta manera, se crea un directorio .repo/ con repositorios Git para el código fuente de Repo y los archivos de manifiesto estándar de Android.

Opciones:

  • -u: Especifica una URL desde la que podrás obtener el repositorio de un manifiesto. El manifiesto común se encuentra en https://android.googlesource.com/platform/manifest.

  • -m: Selecciona un archivo de manifiesto dentro del repositorio. Si no seleccionas ningún nombre de manifiesto, el valor predeterminado será default.xml.

  • -b: Especifica una revisión, es decir, una manifest-branch en particular.

sync

repo sync [project-list]

Permite descargar nuevos cambios y actualiza los archivos de trabajo en el entorno local, lo que, básicamente, logra git fetch en todos los repositorios Git. Si ejecutas repo sync sin argumentos, se sincronizan los archivos de todos los proyectos.

Cuando ejecutas repo sync, ocurre lo siguiente:

  • Si nunca se sincronizó el proyecto, repo sync equivaldrá a git clone. Todas las ramas del repositorio remoto se copian en el directorio del proyecto local.

  • Si el proyecto se sincronizó anteriormente, repo sync equivaldrá a lo siguiente:

    git remote update
    git rebase origin/branch
    

    En este caso, branch representa a la rama que se está procesando en el directorio del proyecto local en ese momento. Si la rama local no está realizando el seguimiento de una rama en el repositorio remoto, no se sincronizará el proyecto.

Una vez que repo sync se ejecute correctamente, se actualizará el código en los proyectos especificados y se sincronizará con el código del repositorio remoto.

Opciones de clave:

  • -c: Obtén solo la rama del manifiesto actual del servidor.
  • -d: Revierte proyectos específicos a la revisión del manifiesto. Esta opción resulta útil si el proyecto se encuentra en una rama de tema, pero se requiere temporalmente la revisión del manifiesto.
  • -f: Continúa con la sincronización de otros proyectos, incluso si falla la de uno de ellos.
  • threadcount: Divide la sincronización en subprocesos para que se completen más rápido. Asegúrate de no sobrecargar la máquina; deja algunas CPUs reservadas para otras tareas. Para ver la cantidad de CPUs disponibles, primero debes ejecutar nproc --all.
  • -q: Se ejecuta silenciosamente, suprimiendo los mensajes de estado.
  • -s: Se sincroniza con una buena compilación conocida como lo especifica el elemento manifest-server en el manifiesto actual.

Para obtener más opciones, ejecuta repo help sync.

upload

repo upload [project-list]

Sube los cambios al servidor de revisión. En el caso de los proyectos especificados, Repo compara las ramas locales con las ramas remotas actualizadas durante la sincronización más reciente de Repo. Repo te solicitará que selecciones una o varias ramas que aún no se actualizaron para revisarlas.

Luego, todas las confirmaciones de las ramas seleccionadas se transmiten a Gerrit por medio de una conexión HTTPS. Debes configurar una contraseña HTTPS para habilitar la autorización de la carga. Visita el Generador de contraseñas para generar un nuevo par de nombre de usuario/contraseña para usar con HTTPS.

Cuando Gerrit recibe los datos del objeto a través de su servidor, convierte cada confirmación en un cambio para que los revisores puedan comentar una confirmación específica. Para combinar varias confirmaciones de punto de control en una sola confirmación, usa git rebase -i antes de ejecutar la carga.

Si ejecutas repo upload sin argumentos, se buscarán en todos los proyectos los cambios que deban subirse.

Si quieres editar cambios una vez que ya se subieron, usa una herramienta como git rebase -i o git commit --amend para actualizar tus confirmaciones locales. Cuando finalices las ediciones, haz lo siguiente:

  • Verifica que la rama actualizada sea la que se está procesando en ese momento.
  • Usa repo upload --replace PROJECT para abrir el editor de coincidencias de cambios.
  • Para cada confirmación de la serie, ingresa el ID de cambio de Gerrit dentro de los corchetes:

    # 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.
    

Una vez que se haya completado la carga, los cambios tendrán un conjunto de parches adicional.

Si solo deseas subir la rama de Git que se está procesando en ese momento, usa la marca --current-branch (o la versión abreviada --cbr).

diff

repo diff [project-list]

Muestra cambios pendientes entre la confirmación y el árbol de trabajo que usa git diff.

download

repo download target change

Descarga el cambio especificado desde el sistema de revisión y lo pone a disposición en el directorio de trabajo local de tu proyecto.

Por ejemplo, si quieres descargar el cambio 23823 en tu directorio platform/build, haz lo siguiente:

repo download platform/build 23823

Para quitar las confirmaciones que se obtienen con repo download, puedes ejecutar repo sync. También puedes procesar la rama remota con git checkout m/main.

forall

repo forall [project-list] -c command

Ejecuta el comando shell específico en cada proyecto. repo forall pone a disposición las siguientes variables de entorno adicionales:

  • REPO_PROJECT se configura con el nombre único del proyecto.
  • REPO_PATH es la ruta de acceso relativa a la raíz del cliente.
  • REPO_REMOTE es el nombre del sistema remoto del manifiesto.
  • REPO_LREV es el nombre de la revisión del manifiesto, traducido a una rama de seguimiento local. Úsalo si necesitas pasar la revisión del manifiesto a un comando de Git que se ejecuta localmente.
  • REPO_RREV es el nombre de la revisión del manifiesto, exactamente como está escrito en el manifiesto.

Opciones:

  • -c: El comando y los argumentos para ejecutar. El comando se evalúa con /bin/sh y cualquier argumento posterior se pasa por medio de los parámetros de posicionamiento de shell.
  • -p: Muestra los encabezados del proyecto antes del resultado del comando especificado. Eso se logra vinculando los canales a las transmisiones stdin, stdout y stderr del comando, y canalizando todos los resultados en una transmisión continua que se muestra en una sesión de una sola página.
  • -v: Muestra los mensajes que el comando escribe a stderr.

prune

repo prune [project-list]

Borra los temas que ya se fusionaron.

start

repo start branch-name [project-list]

Inicia una nueva rama de desarrollo, comenzando por la revisión especificada en el manifiesto.

El argumento BRANCH_NAME proporciona una descripción breve del cambio que intentas realizar en los proyectos. Si no lo conoces, considera usar el nombre default.

El argumento project-list especifica qué proyectos participan en esta rama de tema.

status

repo status [project-list]

Compara el árbol de trabajo con el área de la etapa de pruebas (índice) y la confirmación más reciente en esta rama (ENCABEZADO) en cada proyecto especificado. Muestra una línea de resumen para cada archivo en el que hay una diferencia entre estos tres estados.

Para ver el estado de la rama actual únicamente, ejecuta repo status .. La información de estado se enumera por proyecto. Para cada archivo del proyecto, se usa un código de dos letras.

En la primera columna, una letra mayúscula indica de qué manera el área de preparación difiere del estado confirmado más reciente.

Letra Significado Descripción
- Sin cambios Lo mismo en el encabezado y en el índice
A Agregado No en el encabezado, sí en el índice
M Modificado En el encabezado, modificado en el índice
D Borrado En el encabezado, no en el índice
R Se cambió el nombre No en el encabezado, se modificó la ruta de acceso en el índice
C Copiado No en el encabezado, copiado desde otra ubicación en el índice
T Cambió el modo Mismo contenido en el encabezado y en el índice, se cambió el modo
U Se separaron Conflicto entre el encabezado y el índice; se requiere una solución

En la segunda columna, una letra minúscula indica de qué manera el directorio de trabajo difiere del índice.

Letra Significado Descripción
- Nuevo/desconocido No en el índice, sí en el árbol de trabajo
m Modificado Se modificó en el índice y en el árbol de trabajo
d Borrado En el índice, no en el árbol de trabajo

Cómo controlar los errores de repositorio

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 .

Se muestra el error repo: error: no branches ready for upload cuando no se ejecutó el comando repo start al inicio de la sesión. Para solucionarlo, puedes verificar el ID de confirmación, iniciar una rama nueva y combinarla.