lingo pull

Max PrilutskiyCEO & MitgründerZuletzt aktualisiert: vor 2 Monaten · 2 Min. Lesezeit

Ruft die Ergebnisse des letzten Pushs ab und schreibt sie mit Konflikterkennung anhand der Sperrdatei auf die Festplatte.

text
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 pull aus — es macht genau dort weiter, wo der Lauf aufgehört hat.
  • Abruf auf einem anderen Rechner. Ein Übersetzer führt push auf dem Laptop aus; CI oder ein Teammitglied führt pull im 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 push schreiben konnte. Kurzer Netzwerkausfall, Prozess beendet — pull erledigt 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:

text
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.json als 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:

text
Error: 3 conflict(s) — rerun with --force

Die 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:

bash
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:

bash
lingo pull --dry-run

Gibt 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:

text
✓ Pulled run run_a8c...: wrote 12 file(s), 4 already in sync.

Dry Run:

text
Dry run complete. 16 file(s) already in sync.

Lauf noch nicht abgeschlossen:

text
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“ — pull zielt immer auf einen bestimmten Lauf.
  • Laufstatus verweist auf einen gelöschten oder abgelaufenen Lauf. Die Engine gibt 404 zurück; pull meldet das sauber. Lösche ~/.lingo/runs/<hash>.json und führe push erneut aus.
  • Andere Engine in .lingo/config.json als die, auf der der Lauf erstellt wurde. Die Engine-ID stimmt nicht überein — die CLI meldet einen Fehler mit den IDs. Führe push erneut für die aktuelle Engine aus.