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 schreibt die Ergebnisse bereits, sobald der Lauf abgeschlossen ist — pull ist also nur dann sinnvoll, wenn du nicht synchron gewartet hast oder nicht warten konntest:
- 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. - Abruf auf einem anderen Rechner. Ein Übersetzer führt
pushauf dem Laptop aus; CI oder ein Teammitglied führtpullim selben Checkout mit derselben Engine und denselben Zugangsdaten aus und erhält die Ergebnisse. - 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 run state at ~/.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 run_a8c...: wrote 12 file(s), 4 already in sync.Dry Run:
Dry run complete. 16 file(s) already in sync.Lauf noch nicht abgeschlossen:
Run run_a8c... is running, not pulling yet.(pull blockiert nicht bei laufenden Läufen — führe es später erneut aus oder verwende beim nächsten Mal push, das wartet.)
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.
