Referencia de comandos de Repo

Repo complementa a Git mediante la facilitación del el trabajo entre varios repositorios. Consulta el artículo sobre Herramientas de control de código fuente para obtener una explicación de la relación entre Repo y Git. Para obtener más detalles 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 de origen local para los proyectos:

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

help

En esta página, solo se destacan las opciones principales. Consulta la ayuda de línea de comandos para obtener información detallada. Una vez que instales Repo, podrás ejecutar lo siguiente para encontrar la documentación más reciente que comienza con un resumen de todos los comandos:

repo help

Para ver información detallada sobre cualquier comando, ejecuta lo siguiente dentro de un árbol de Repo:

repo help command

Por ejemplo, el siguiente comando muestra una descripción y una lista de opciones para el argumento init de Repo, que inicializa Repo en el directorio que estás usando. (Consulta init para obtener más detalles).

repo help init

Sin embargo, si solo quieres ver la lista de opciones disponibles, 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, un manifest-branch en particular.

Nota: Para todos los demás comandos de Repo, el directorio de trabajo que uses en ese momento debe ser el directorio principal de .repo/ o un subdirectorio de este.

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
    

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

  • Si la operación de reubicación de Git genera conflictos de fusión, usa comandos de Git normales (por ejemplo, git rebase --continue) para resolverlos.

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.

Estas son las opciones principales. Consulta repo help sync para obtener información adicional:

  • -c: Obtén solo la rama del manifiesto actual del servidor.

  • -d: Revierte proyectos específicos a la revisión del manifiesto. Esta acción resulta útil si el proyecto se encuentra actualmente 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.

  • -jthreadcount: Divide la sincronización en subprocesos para que se completen más rápido. Asegúrate de no sobrecargar la máquina; deja algunas CPU reservada para otras tareas. Para ver la cantidad de CPU 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.

upload

repo upload [project-list]

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 actualización de la carga. Visita el Generador de contraseñas a fin de generar un nuevo par de nombre de usuario/contraseña para usar con HTTPS.

Cuando Gerrit recibe los datos del objeto por medio de su servidor, convierte cada confirmación en un cambio de manera 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 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 replacments
    # 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 de compilación o plataforma, 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/master.

Nota: Existen retrasos de replicación en los servidores de todo el mundo, por lo que hay una leve demora de duplicación entre el momento en que un cambio puede visualizarse en la web en Gerrit y el momento en que repo download puede encontrar el cambio para todos los usuarios.

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

Opciones:

  • -c: El comando y los argumentos para ejecutar. El comando se evalúa mediante /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.

Nota: Un punto ( . ) es la abreviatura del proyecto en el directorio de trabajo actual.

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