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 на странице проектов. Там будет тот же предварительный просмотр до записи.
В отчёте видно, какие проекты новые, а какие слиты с существующими, сколько задач, запусков и других записей добавлено или обновлено, какие задачи получили новый номер и что требует вашего внимания.
Привязка папки
У загруженного проекта на новом устройстве ещё нет папки. Задачи и историю видно, но агенты не смогут работать с кодом, пока вы не привяжете репозиторий:
-
Склонируйте репозиторий.
-
Привяжите папку в веб-интерфейсе: откройте проект и выберите 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 можно указать -, чтобы читать выгрузку из стандартного ввода.