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
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, 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á 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
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 ejecutarnproc --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.