Obtén los resultados del push más reciente y escríbelos en disco, con detección de conflictos frente al lockfile.
lingo pull [--force] [--dry-run]Cuándo usarlo#
lingo push ya escribe los resultados cuando termina la ejecución, así que pull solo resulta útil cuando no esperaste (o no pudiste esperar) de forma sincrónica:
- Cerraste la terminal en plena traducción. Vuelve a abrirla y ejecuta
lingo pull: retoma desde donde se quedó la ejecución. - Haces pull desde otra máquina. El traductor ejecuta
pushen su laptop; CI o un compañero ejecutapullsobre el mismo checkout, el mismo motor y las mismas credenciales, y obtiene los resultados. - Retomaste el trabajo después de que terminó la ejecución, pero antes de que
pushpudiera escribir. Un corte de red, un proceso terminado a la fuerza:pullcompleta el trabajo.
Cómo encuentra la ejecución#
pull lee ~/.lingo/runs/<hash>.json, donde <hash> se deriva de la ruta absoluta de la raíz del proyecto. El archivo registra el último runId de push. Sin eso, pull da error:
Error: No run state at ~/.lingo/runs/<hash>.json — run `lingo push` first so we
know which run's outputs to pull.Este archivo es específico de cada máquina y vive fuera del repositorio (consulta Configuration para entender por qué).
Detección de conflictos#
Antes de escribir cada destino, pull compara:
- El hash del archivo local en disco
- El hash registrado en
.lingo/lock.jsoncomo la última versión conocida del servidor
Si coinciden → no hay ediciones locales y es seguro sobrescribir. Si difieren → sí hay ediciones locales; hacer pull las descartaría. pull aborta:
Error: 3 conflict(s) — rerun with --forceAquí, el lockfile es la única fuente de verdad: registra lo último que escribió el servidor, no el contenido fuente. Las ediciones manuales en archivos traducidos que quieras conservar deben confirmarse con un commit (para que sobrevivan a pull) o recuperarse con --force (para que se sobrescriban).
Flags#
--force / -f#
Sobrescribe los archivos de destino locales que hayan divergido del lockfile. Úsalo después de revisar los conflictos y decidir que la versión del servidor es la canónica (por ejemplo, si alguien más hizo push de una actualización del glosario que debe tener prioridad).
Flujo de trabajo recomendado:
git status # stash or commit local edits first
git stash # if you want to keep them aside
lingo pull --force
git stash pop # re-apply your edits, resolve conflicts manually--dry-run#
Muestra lo que pull haría sin tocar el sistema de archivos:
lingo pull --dry-runMuestra cuántos archivos se escribirían y cuántos ya están sincronizados. Útil en CI para comprobar que nada se haya desalineado.
Salida#
Éxito:
✓ Pulled run run_a8c...: wrote 12 file(s), 4 already in sync.Simulación:
Dry run complete. 16 file(s) already in sync.La ejecución todavía no termina:
Run run_a8c... is running, not pulling yet.(pull no bloquea ejecuciones en curso: vuelve a ejecutarlo más tarde, o usa push la próxima vez, que sí espera).
Casos límite#
- Sin push previo. Error como arriba. No existe el concepto de "hacer pull de traducciones que existen en algún lugar del servidor":
pullsiempre apunta a una ejecución específica. - Estado de ejecución apuntando a una ejecución eliminada o expirada. El motor devuelve 404;
pulllo reporta claramente. Elimina~/.lingo/runs/<hash>.jsony vuelve a ejecutarpush. - Un motor distinto en
.lingo/config.jsonal que se usó para crear la ejecución. Hay una incompatibilidad en el ID del motor: la CLI muestra el error con los IDs. Vuelve a ejecutarpushcontra el motor actual.
