Перенос проектов на другое устройство

Как выгрузить проекты на одной машине, загрузить их на другой и привязать там папку репозитория.

Istok хранит всё в локальной базе. Чтобы продолжить работу на другой машине, выгрузите нужные проекты на одном устройстве и загрузите файл на другом. Автоматической синхронизации пока нет: вы сами решаете, когда переносить данные.

На обоих устройствах должна стоять одна и та же версия Istok. Сначала выполните istok update на обоих.

Что переносится, а что остаётся

Файл выгрузки содержит то, что нужно для продолжения работы:

  • проекты (имена и идентификаторы, без папок);
  • задачи с историей, зависимостями и записями о завершении;
  • запуски, выполненные в них команды и проверки;
  • то, что видел каждый агент при взятии задачи, без фрагментов кода;
  • общие правила, контекст и знания проекта.

Остаётся на том устройстве, где появилось:

  • папки проектов: у каждого устройства свои пути;
  • вывод команд (логи stdout и stderr);
  • индекс кода, его каждое устройство строит само;
  • фрагменты кода, которые агенты получили из индекса;
  • контекст и знания с видимостью local_only;
  • удалённые проекты.

В файле лежат история ваших задач и заметки по проектам. Обращайтесь с ним как с личным документом.

Выгрузка

Из папки репозитория проекта:

istok export

Команда создаст в текущей папке файл istok-export-<дата>-<время>.json. Чтобы выбрать проекты или имя файла:

istok export --project acme-api --project billing-worker -o work.json
istok export --all -o everything.json

В веб-интерфейсе откройте проект и выберите Export project в меню ⋯ или нажмите Export all на странице проектов.

Загрузка

Скопируйте файл на другое устройство и сначала посмотрите, что изменится:

istok import work.json --dry-run

Затем загрузите его:

istok import work.json

В веб-интерфейсе нажмите Import на странице проектов. Там будет тот же предварительный просмотр до записи.

В отчёте видно, какие проекты новые, а какие слиты с существующими, сколько задач, запусков и других записей добавлено или обновлено, какие задачи получили новый номер и что требует вашего внимания.

Привязка папки

У загруженного проекта на новом устройстве ещё нет папки. Задачи и историю видно, но агенты не смогут работать с кодом, пока вы не привяжете репозиторий:

  1. Склонируйте репозиторий.

  2. Привяжите папку в веб-интерфейсе: откройте проект и выберите Bind folder. Или в терминале:

    istok project rebind acme-api ~/src/acme-api

Istok никогда не угадывает, какая папка относится к проекту. Если этот репозиторий уже зарегистрирован на устройстве как отдельный проект, загрузка предупредит об этом: оставьте один из проектов и привяжите к нему папку.

Как сливаются изменения

Выгружать и загружать можно в обе стороны сколько угодно раз. Повторная загрузка того же файла ничего не меняет.

  • Задачи, контекст и знания: побеждает версия с большим числом изменений. Если одну и ту же запись изменили на обоих устройствах после прошлого обмена, остаётся версия устройства, на которое вы загружаете, а в отчёте появляется конфликт.
  • История, запуски и проверки добавляются, ничего не теряется.
  • Удаления тоже переносятся: задача, правило или заметка, удалённые на одном устройстве, удаляются и на другом.
  • Номера задач: если оба устройства, пока были порознь, создали задачу с одним номером, более поздняя получает следующий свободный номер. Это записывается в её историю. После этого номер такой задачи может различаться на устройствах; агенты работают по идентификаторам задач, а они не меняются.
  • Активные запуски: если на обоих устройствах есть активный запуск одной задачи, пришедший пропускается и попадает в отчёт как конфликт.

Справка по командам

istok export:

Флаг Назначение
--project, -p Проект для выгрузки: ID, префикс ID или имя. Можно повторять. По умолчанию — текущий проект.
--all Выгрузить все проекты.
--output, -o Файл для записи. - пишет в стандартный вывод.
--json Вывести сводку в JSON вместо текста.
--database База для выгрузки. Также ISTOK_DATABASE.

istok import FILE:

Флаг Назначение
--dry-run Показать отчёт, ничего не записывая.
--json Вывести отчёт в JSON.
--database База для загрузки. Также ISTOK_DATABASE.

Вместо FILE можно указать -, чтобы читать выгрузку из стандартного ввода.