|
Документация
Заказать демоПлатформа
ПлатформаMCPCLI
APIПроцессы
РуководстваЖурнал изменений

Обзор

  • @lingo.dev/cli

Начало работы

  • Быстрый старт
  • Конфигурация

Справочник

  • lingo push
  • lingo pull
  • Другие команды
  • lingo purge

Конфигурация

  • Управление ключами
  • Форматы
  • Локали

Руководства

  • Добавление локали
  • Существующие переводы
  • Повторный перевод
  • Примечания для переводчика
  • Запуски, состояние и восстановление
  • CI/CD
  • Монорепозитории
  • Крупные проекты

Ищете CLI прежней версии (v0)? См. документацию по CLI прежней версии

lingo pull

Получает результаты последнего push и записывает их на диск, проверяя конфликты по lockfile.

text
lingo pull [--force] [--dry-run]

Когда использовать#

lingo push и так записывает результаты после завершения запуска, поэтому pull нужен только в случаях, когда вы не стали или не смогли ждать синхронно:

  • Закрыли терминал прямо во время перевода. Откройте его снова и запустите lingo pull — команда подхватит процесс с того места, где остановился запуск.
  • Делаете pull с другой машины. Переводчик запускает push на своём ноутбуке; CI или коллега запускает pull в той же checkout-копии, с тем же движком и теми же учётными данными — и получает результаты.
  • Вернулись к работе уже после завершения запуска, но до того, как push успела записать результаты. Сбой сети, принудительное завершение процесса — pull доведёт дело до конца.

Как команда находит запуск#

pull читает ~/.lingo/runs/<hash>.json, где <hash> вычисляется на основе абсолютного пути к корню проекта. В этом файле хранится последний runId из push. Без него pull завершится с ошибкой:

text
Error: No run state at ~/.lingo/runs/<hash>.json — run `lingo push` first so we
       know which run's outputs to pull.

Этот файл создаётся отдельно для каждой машины и хранится вне репозитория (подробности — в разделе Configuration).

Обнаружение конфликтов#

Перед записью каждого целевого файла pull сравнивает:

  • Хеш локального файла на диске
  • Хеш, записанный в .lingo/lock.json как последняя известная версия с сервера

Если хеши совпадают → локальных изменений нет, файл можно безопасно перезаписать. Если различаются → локальные изменения есть, и pull их затрёт. В этом случае pull прерывает выполнение:

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

Здесь lockfile — единственный источник истины: он отслеживает то, что сервер записал последним, а не содержимое исходников. Если вы хотите сохранить ручные изменения в переведённых файлах, их нужно закоммитить (тогда они переживут pull) или выполнить pull с --force (тогда они будут перезаписаны).

Флаги#

--force / -f#

Перезаписывает локальные целевые файлы, которые разошлись с lockfile. Используйте после того, как проверили конфликты и решили, что версия на сервере — каноническая (например, если кто-то другой отправил push с обновлением глоссария, которому нужно отдать приоритет).

Рекомендуемый рабочий процесс:

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#

Показывает, что сделал бы pull, не внося изменений в файловую систему:

bash
lingo pull --dry-run

Показывает, сколько файлов было бы записано и сколько уже синхронизировано. Полезно в CI, чтобы убедиться, что ничего не разошлось.

Вывод#

Успешное выполнение:

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

Пробный запуск:

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

Запуск ещё не завершён:

text
Run run_a8c... is running, not pulling yet.

(pull не ждёт завершения уже запущенных процессов — повторите команду позже или в следующий раз используйте push, которая ждёт.)

Пограничные случаи#

  • Нет предыдущего push. Ошибка будет такой же, как выше. Здесь не предусмотрен сценарий «получить переводы, которые где-то уже есть на сервере» — pull всегда работает с конкретным запуском.
  • Состояние запуска указывает на удалённый или истёкший запуск. Движок вернёт 404, а pull корректно сообщит об этом. Удалите ~/.lingo/runs/<hash>.json и заново запустите push.
  • В .lingo/config.json указан не тот движок, на котором был создан запуск. ID движка не совпадает — CLI завершится с ошибкой и покажет оба ID. Повторно запустите push для текущего движка.

Эта страница была полезной?

Max PrilutskiyMax Prilutskiy·Обновлено 5 дней назад·2 минуты чтения