直近の push の出力を取得し、lockfile との競合を検出しながらディスクに書き込みます。
lingo pull [--force] [--dry-run]使うタイミング#
lingo push は実行完了時に出力を書き込むため、pull が役立つのは、同期的に待たなかった、または待てなかった場合に限られます。
- 翻訳の途中でターミナルを閉じてしまった場合。 ターミナルを開き直して
lingo pullを実行すれば、実行が止まったところから続きます。 - 別のマシンから pull する場合。 翻訳者がノートPCで
pushを実行し、CI やチームメイトが同じ checkout、同じエンジン、同じ認証情報でpullを実行すると、出力を取得できます。 - 実行完了後、
pushが書き込む前に作業へ戻った場合。 一時的なネットワーク障害やプロセスの強制終了があっても、pullが残りの処理を完了します。
実行の見つけ方#
pull は ~/.lingo/runs/<hash>.json を読み込みます。ここで <hash> は、プロジェクトルートの絶対パスから導出されます。このファイルには、runId の最後の push が記録されています。これがない場合、pull はエラーになります。
Error: No run state at ~/.lingo/runs/<hash>.json — run `lingo push` first so we
know which run's outputs to pull.このファイルはマシンごとに作られ、リポジトリの外に保存されます(理由の詳細は Configuration を参照してください)。
競合検出#
各ターゲットを書き込む前に、pull は次の 2 つを比較します。
- ディスク上のローカルファイル のハッシュ
.lingo/lock.jsonに最後にサーバー上のバージョンとして記録されたハッシュ
一致していれば → ローカルでの編集はなく、安全に上書きできます。異なっていれば → ローカル編集があり、pull するとそれらは失われます。その場合、pull は中断します。
Error: 3 conflict(s) — rerun with --forceここでの唯一の信頼できる情報源は lockfile です。追跡しているのはソースコンテンツではなく、サーバーが最後に書き込んだ内容です。残したい翻訳ファイルへの手動編集はコミットしておく(そうすれば pull を実行しても残る)か、--force を付けて pull する(そうすれば上書きされる)必要があります。
フラグ#
--force / -f#
lockfile と差異のあるローカルのターゲットファイルを上書きします。競合をレビューし、サーバー側のバージョンを正と判断したうえで使ってください(例: 他の誰かが glossary の更新を push しており、そちらを優先すべき場合)。
推奨ワークフロー:
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#
ファイルシステムには手を加えず、pull が何をするかだけを表示します。
lingo pull --dry-run書き込まれるファイル数と、すでに同期済みのファイル数を出力します。何もずれていないことを確認したい CI で便利です。
出力#
成功時:
✓ Pulled run run_a8c...: wrote 12 file(s), 4 already in sync.ドライラン:
Dry run complete. 16 file(s) already in sync.実行がまだ完了していない場合:
Run run_a8c... is running, not pulling yet.(pull は実行中の run が終わるまで待機しません。あとで再実行するか、次回は待機する push を使ってください。)
エッジケース#
- これまでに push が一度もない場合。 上記と同様にエラーになります。「サーバー上のどこかにある翻訳を pull する」という概念はありません。
pullは常に特定の run を対象にします。 - 削除済みまたは期限切れの run を指している実行状態。 エンジンは 404 を返し、
pullはそれを分かりやすく報告します。~/.lingo/runs/<hash>.jsonを削除し、pushを再実行してください。 .lingo/config.jsonのエンジンが、その run を作成したときのものと異なる場合。 エンジン ID が一致していないため、CLI は ID を表示してエラーにします。現在のエンジンに対してpushを再実行してください。
