Sitelet https://lingo.dev/de/docs/cli/pull

lingo pull

Zuletzt aktualisiert: letzte Woche · 3 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 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 pull aus — es macht genau dort weiter, wo der Lauf aufgehört hat.
  • Später im selben CI-Job. Ein Schritt führt lingo push aus, ein späterer Schritt auf demselben Runner und im selben Checkout führt lingo pull aus 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 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 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.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 lrg_a8c...: wrote 12 file(s), 4 already in sync.

Dry Run:

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

Lauf fehlgeschlagen oder abgebrochen:

text
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“ — 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.