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 enhttps://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á agit 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 ejecutarnproc --all
.-q
: Se ejecuta silenciosamente, suprimiendo los mensajes de estado.-s
: Se sincroniza con una buena compilación conocida como lo especifica el elementomanifest-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.