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 už po dokončení běhu výstupy zapisuje — takže pull se hodí jen tehdy, když jste nečekali synchronně (nebo jste čekat nemohli):
- 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. - Stahujete z jiného počítače. Překladatel spustí
pushna svém notebooku; CI / kolega spustípullnad stejným checkoutem, se stejným enginem a stejnými přihlašovacími údaji a získá výstupy. - 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 run state at ~/.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 run_a8c...: wrote 12 file(s), 4 already in sync.Dry run:
Dry run complete. 16 file(s) already in sync.Běh ještě není dokončen:
Run run_a8c... is running, not pulling yet.(pull nečeká na právě běžící běhy — spusťte ho znovu později, nebo příště použijte push, které čeká.)
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.
