lingo pull
Ruft die Ergebnisse des letzten Pushs ab und schreibt sie mit Konflikterkennung anhand der Sperrdatei auf die Festplatte.
lingo pull [--force] [--dry-run]Wann du es verwenden solltest#
lingo push beendet sich, sobald der Lauf übermittelt wurde. Mit pull holst du dir dann die Ausgaben. Führe es nach jedem Push ohne --wait aus — und auch dann, wenn ein Push mit --wait nichts schreiben konnte:
- Terminal während der Übersetzung geschlossen. Öffne es wieder und führe
lingo pullaus — es macht genau dort weiter, wo der Lauf aufgehört hat. - Später im selben CI-Job. Ein Schritt führt
lingo pushaus, ein späterer Schritt auf demselben Runner und im selben Checkout führtlingo pullaus und holt die Ausgaben ab. Auf anderen Rechnern sind sie verfügbar, sobald sie committet wurden. - Du setzt die Arbeit fort, nachdem der Lauf beendet war, aber bevor
pushschreiben konnte. Kurzer Netzwerkausfall, Prozess beendet —pullerledigt den Rest.
So wird der Lauf gefunden#
pull liest ~/.lingo/runs/<hash>.json, wobei <hash> aus dem absoluten Pfad des Projektstammverzeichnisses abgeleitet wird. Die Datei speichert die letzte runId von push. Ohne diese Datei gibt pull einen Fehler aus:
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.Diese Datei ist rechnerbezogen und liegt außerhalb des Repositorys (siehe Configuration für Details, warum das so ist).
Konflikterkennung#
Bevor jedes Ziel geschrieben wird, vergleicht pull:
- Hash der lokalen Datei auf der Festplatte
- Hash, der in
.lingo/lock.jsonals zuletzt bekannte Serverversion gespeichert ist
Wenn sie übereinstimmen → keine lokalen Änderungen, sicheres Überschreiben. Wenn sie abweichen → es gibt lokale Änderungen; ein Pull würde sie verwerfen. pull bricht ab:
Error: 3 conflict(s) — rerun with --forceDie Sperrdatei ist hier die einzige verlässliche Quelle — sie erfasst, was der Server zuletzt geschrieben hat, nicht den Quellinhalt. Manuelle Änderungen an übersetzten Dateien, die du behalten möchtest, solltest du committen (damit sie pull überstehen) oder mit --force pullen (damit sie überschrieben werden).
Flags#
--force / -f#
Überschreibt lokale Zieldateien, die von der Sperrdatei abweichen. Verwende das, nachdem du die Konflikte geprüft und entschieden hast, dass die Serverversion maßgeblich ist (z. B. wenn jemand anderes ein Glossar-Update gepusht hat, das Vorrang haben soll).
Empfohlener 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#
Zeigt, was pull tun würde, ohne das Dateisystem anzufassen:
lingo pull --dry-runGibt die Anzahl der Dateien aus, die geschrieben würden, und wie viele bereits synchron sind. Nützlich in CI, um sicherzustellen, dass nichts auseinandergelaufen ist.
Ausgabe#
Erfolg:
✓ Pulled run lrg_a8c...: wrote 12 file(s), 4 already in sync.Dry Run:
Dry run complete. 16 file(s) already in sync.Lauf fehlgeschlagen oder abgebrochen:
Run lrg_a8c... is failed, not pulling yet.(pull wartet auf einen Lauf, der noch aussteht oder noch läuft, zeigt dabei denselben Fortschritt wie push --wait an und schreibt anschließend die Ausgaben. Ein fehlgeschlagener oder abgebrochener Lauf hat nichts zum Abrufen — siehe Läufe, Status und Wiederherstellung.)
Sonderfälle#
- Kein vorheriger Push. Fehler wie oben. Es gibt kein Konzept wie „Übersetzungen pullen, die irgendwo auf dem Server existieren“ —
pullzielt immer auf einen bestimmten Lauf. - Laufstatus verweist auf einen gelöschten oder abgelaufenen Lauf. Die Engine gibt 404 zurück;
pullmeldet das sauber. Lösche~/.lingo/runs/<hash>.jsonund führepusherneut aus. - Andere Engine in
.lingo/config.jsonals die, auf der der Lauf erstellt wurde. Die Engine-ID stimmt nicht überein — die CLI meldet einen Fehler mit den IDs. Führepusherneut für die aktuelle Engine aus.