lingo pull
Stáhne výstupy z posledního pushnutí a zapíše je na disk s detekcí konfliktů vůči lockfile.
lingo pull [--force] [--dry-run]Kdy ho použít#
lingo push se ukončí hned po odeslání spuštění, takže jeho výstupy získáte pomocí pull. Spusťte ho po jakémkoli pushi bez --wait — i tehdy, když push s --wait nemohl zapisovat:
- Zavřeli jste terminál uprostřed překladu. Znovu ho otevřete a spusťte
lingo pull— naváže tam, kde běh skončil. - Později v rámci stejné CI úlohy. Jeden krok spustí
lingo push, pozdější krok na stejném runneru a ve stejném checkoutu spustílingo pulla získá výstupy. Na jiných počítačích budou k dispozici, jakmile se commitnou. - Vrátili jste se k práci poté, co běh skončil, ale ještě předtím, než
pushstihlo zapsat výstupy. Výpadek sítě, ukončený proces —pullto dokončí.
Jak najde běh#
pull čte ~/.lingo/runs/<hash>.json, kde <hash> je odvozené z absolutní cesty ke kořenovému adresáři projektu. Soubor zaznamenává poslední runId z push. Bez něj pull skončí chybou:
Error: No saved run state for this project (looked for ~/.lingo/runs/<hash>.json) — run
`lingo push` first so we know which run's outputs to pull.Tento soubor je vázaný na konkrétní počítač a nachází se mimo repozitář (proč tomu tak je, najdete v Configuration).
Detekce konfliktů#
Před zápisem každého cíle pull porovnává:
- Hash lokálního souboru na disku
- Hash zaznamenaný v
.lingo/lock.jsonjako poslední známá verze na serveru
Pokud se shodují → žádné lokální úpravy, přepsání je bezpečné. Pokud se liší → existují lokální úpravy; pull by je zahodil. pull se ukončí:
Error: 3 conflict(s) — rerun with --forceLockfile je tu jediný zdroj pravdy — sleduje, co server zapsal naposledy, ne zdrojový obsah. Ruční úpravy přeložených souborů, které chcete zachovat, by měly být commitnuté (aby přežily pull) nebo stažené pomocí --force (aby se přepsaly).
Příznaky#
--force / -f#
Přepíše lokální cílové soubory, které se rozešly s lockfile. Použijte až poté, co zkontrolujete konflikty a rozhodnete, že verze na serveru je směrodatná (např. když někdo jiný pushnul aktualizaci glosáře, která má mít přednost).
Doporučený workflow:
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#
Ukáže, co by pull udělalo, aniž by sáhlo na souborový systém:
lingo pull --dry-runVypíše počet souborů, které by se zapsaly, a kolik jich už je synchronizovaných. Hodí se v CI pro ověření, že se nic nerozešlo.
Výstup#
Úspěch:
✓ Pulled run lrg_a8c...: wrote 12 file(s), 4 already in sync.Dry run:
Dry run complete. 16 file(s) already in sync.Spuštění selhalo nebo bylo zrušeno:
Run lrg_a8c... is failed, not pulling yet.(pull čeká na spuštění, které je stále ve stavu pending nebo running, se stejným zobrazením průběhu jako push --wait, a pak zapíše výstupy. Ze selhaného nebo zrušeného spuštění není co stáhnout — viz Runs, state, and recovery.)
Okrajové případy#
- Žádný předchozí push. Chyba jako výše. Neexistuje tu koncept „stáhnout překlady, které někde na serveru existují“ —
pullvždy cílí na konkrétní běh. - Stav běhu ukazuje na smazaný / expirovaný běh. engine vrátí 404;
pullto srozumitelně nahlásí. Smažte~/.lingo/runs/<hash>.jsona znovu spusťtepush. - V
.lingo/config.jsonje jiný engine než ten, na kterém byl běh vytvořen. ID enginu nesouhlasí — CLI skončí chybou a vypíše obě ID. Znovu spusťtepushproti aktuálnímu enginu.