Recupera los resultados del push más reciente y escríbelos en disco, con detección de conflictos frente al archivo de bloqueo.
lingo pull [--force] [--dry-run]Cuándo usarlo#
lingo push ya escribe los resultados cuando termina la ejecución, así que pull solo tiene sentido si no esperaste —o no pudiste esperar— de forma síncrona:
- Has cerrado la terminal a mitad de la traducción. Vuelve a abrirla y ejecuta
lingo pull: retomará el proceso donde lo dejó la ejecución. - Haces pull desde otra máquina. El traductor ejecuta
pushen su portátil; CI o un compañero ejecutanpullsobre el mismo checkout, con el mismo motor y las mismas credenciales, y obtienen los resultados. - Has retomado el trabajo después de que terminara la ejecución, pero antes de que
pushpudiera escribir. Un corte puntual de red, un proceso forzado a cerrarse...pullremata 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 él, pull devuelve un 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 está fuera del repositorio (consulta Configuration para ver 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 última versión conocida del servidor
Si coinciden → no hay cambios locales y se puede sobrescribir sin problema. Si difieren → hay cambios locales; hacer pull los descartaría. pull aborta:
Error: 3 conflict(s) — rerun with --forceAquí, el archivo de bloqueo 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 archivo de bloqueo. Úsalo después de revisar los conflictos y decidir que la versión del servidor es la canónica (por ejemplo, si otra persona hizo push de una actualización del glosario que debe prevalecer).
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 haría pull 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 no se ha desviado nada.
Salida#
Correcto:
✓ 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 aún no ha terminado:
Run run_a8c... is running, not pulling yet.(pull no se queda esperando a que terminen las ejecuciones en curso: vuelve a lanzarlo más tarde, o usa push la próxima vez, que sí espera).
Casos límite#
- No hay ningún push previo. Error como el anterior. No existe el concepto de «hacer pull de traducciones que existen en algún punto del servidor»:
pullsiempre apunta a una ejecución concreta. - El estado de la ejecución apunta a una ejecución eliminada o caducada. El motor devuelve un 404;
pulllo informa con claridad. Elimina~/.lingo/runs/<hash>.jsony vuelve a ejecutarpush. - En
.lingo/config.jsonhay un motor distinto del que se usó para crear la ejecución. El ID del motor no coincide: la CLI devuelve un error con los ID. Vuelve a ejecutarpushcon el motor actual.
