Busca os outputs do push mais recente e os grava em disco, com detecção de conflitos em relação ao lockfile.
lingo pull [--force] [--dry-run]Quando usar#
lingo push já grava os outputs quando a execução termina — então pull só é útil quando você não esperou (ou não pôde esperar) de forma síncrona:
- Fechou o terminal no meio da tradução. Reabra, execute
lingo pull— ele retoma de onde a execução parou. - Fazendo pull de outra máquina. O tradutor executa
pushno laptop; o CI / um colega de equipe executapullno mesmo checkout, no mesmo engine, com as mesmas credenciais, e recebe os outputs. - Retomou o trabalho depois que a execução terminou, mas antes de
pushconseguir gravar. Oscilação de rede, processo encerrado —pullconclui o trabalho.
Como ele encontra a execução#
pull lê ~/.lingo/runs/<hash>.json, em que <hash> é derivado do caminho absoluto da raiz do projeto. O arquivo registra o último runId de push. Sem ele, pull retorna erro:
Error: No run state at ~/.lingo/runs/<hash>.json — run `lingo push` first so we
know which run's outputs to pull.Esse arquivo é específico de cada máquina e fica fora do repositório (consulte Configuration para entender o motivo).
Detecção de conflitos#
Antes de gravar cada destino, pull compara:
- Hash do arquivo local em disco
- Hash registrado em
.lingo/lock.jsoncomo a última versão conhecida do servidor
Se forem iguais → não há edições locais, então é seguro sobrescrever. Se forem diferentes → existem edições locais; fazer pull descartaria essas alterações. pull aborta:
Error: 3 conflict(s) — rerun with --forceO lockfile é a única fonte de verdade aqui — ele rastreia o que o servidor gravou por último, não o conteúdo de origem. Edições manuais em arquivos traduzidos que você queira manter devem ser commitadas (para sobreviverem a pull) ou sobrescritas com --force (para serem substituídas).
Flags#
--force / -f#
Sobrescreve arquivos de destino locais que divergiram do lockfile. Use depois de revisar os conflitos e decidir que a versão do servidor é a canônica (por exemplo, quando outra pessoa fez push de uma atualização de glossário que deve ter prioridade).
workflow 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#
Mostra o que pull faria sem tocar no sistema de arquivos:
lingo pull --dry-runExibe quantos arquivos seriam gravados e quantos já estão em sincronia. Útil no CI para garantir que nada saiu do lugar.
Saída#
Sucesso:
✓ Pulled run run_a8c...: wrote 12 file(s), 4 already in sync.Simulação:
Dry run complete. 16 file(s) already in sync.Execução ainda não concluída:
Run run_a8c... is running, not pulling yet.(pull não bloqueia execuções em andamento — execute novamente mais tarde ou use push da próxima vez, que espera.)
Casos extremos#
- Nenhum push anterior. Erro como acima. Não existe o conceito de "fazer pull de traduções que existem em algum lugar no servidor" —
pullsempre busca uma execução específica. - Estado da execução apontando para uma execução excluída/expirada. O engine retorna 404;
pullreporta isso com clareza. Exclua~/.lingo/runs/<hash>.jsone executepushnovamente. - Engine diferente em
.lingo/config.jsondaquele em que a execução foi criada. Incompatibilidade de ID do engine — a CLI retorna erro com os IDs. Executepushnovamente no engine atual.
