Перейти до вмісту

Вбудований git

Проєкт Restorm створений, щоб жити в репозиторії git. Інтеграція йде далі за звичайний git commit: вона розуміє формат і вміє розв’язувати конфлікт на рівні предметних сутностей, а не рядків YAML.

Налаштовувати нічого не потрібно. Щойно відкритий файл .restorm опиняється в репозиторії git, поверхні git вмикаються.

Restorm використовує ваш локальний git: ні облікових даних вводити, ні токенами в застосунку керувати не треба. Правило просте — якщо git push працює у вашому терміналі, він працює і в Restorm. Git запускається з вимкненими запитами: репозиторій, який попросив би пароль, одразу зазнає невдачі з повідомленням від git, замість того щоб заблокувати інтерфейс.

Комірка GIT у рядку стану

Section titled “Комірка GIT у рядку стану”

Дві кнопки, Надіслати й Отримати, кожна з позначкою (крапкою, а ніколи не числом), коли є що надіслати або є новіша версія, яку можна отримати.

Меню Git у рядку заголовка пропонує ті самі дії, а також Оновити, Скинути до версії сервера та Історія.

Комірка GIT у рядку стану: «Оновити», «Надіслати» й «Отримати», причому дві останні мають позначку, а далі «Історія». Відкрито підказку «Надіслати до репозиторію».

Модальне вікно надсилання показує вже написане повідомлення коміту, згенероване детерміновано зі структурної різниці — без жодної мовної моделі. По рядку на кожну змінену сутність (запит, сценарій, теку, теку середовищ), а не по рядку на кожне поле.

  • Перемикач мови повідомлення, незалежний від мови інтерфейсу, із перемикачем, щоб зробити її значенням за замовчуванням.
  • Редагований заголовок із орієнтовним лічильником на 72 символи.
  • Багаторядкове тіло.

Підтвердження виконує послідовність: зберегти, git add, коміт, надсилання.

Restorm спершу зберігає, а потім отримує й зливає.

Чисте злиття: дерево й відкриті вкладки оновлюються на місці.

Конфлікт: відкривається подання розв’язання з чотирма панелями.

Подання розв'язання конфлікту з чотирма панелями: перелік конфліктів ліворуч, ваша версія, версія сервера — розбіжні URL обведено червоним — і панель «Розв'язано», заповнена після вибору вашої версії.

ПанельВміст
Перелік конфліктівСутності, що конфліктують
Ваша версіяЛише для читання
Їхня версіяЛише для читання
Розв’язаноРедагована — саме її буде записано

Важливий момент: кожна панель показує сутність у її справжньому редакторі — запит HTTP у редакторі HTTP, сценарій у редакторі сценаріїв. Ви розв’язуєте не маркери <<<<<<< у YAML, а порівнюєте два запити.

По кнопці «використати цю версію» з кожного боку, а поля, що розбігаються, підсвічуються червоним — коли відрізняється лише одне поле, панель одразу відкривається на потрібній вкладці.

Документація API теки середовищ розв’язується автоматично (перемагає новіша версія).

Скасувати виконує git merge --abort. Якщо закрити застосунок посеред розв’язання, під час наступного запуску вам запропонують відмовитися від злиття.

Фонова перевірка (напівотримання)

Section titled “Фонова перевірка (напівотримання)”

Restorm періодично перевіряє, чи існує новіша версія, — ніколи не зливаючи самостійно. Три тригери: помічена зміна в .git, відкриття файлу й таймер, частота якого налаштовується в Параметри ▸ Git (Off, 15 хв, 30 хв, 1 год, 4 год, 12 год, 24 год).

Тоді сповіщення «Доступне оновлення» пропонує Pull now.

Якщо файл змінився на диску після його відкриття, збереження відхиляється, і Restorm просить вас Перезавантажити або Залишити вашу версію.

Дві властивості формату, описані на сторінці Проєкти та файли .restorm: канонічний порядок ключів і стабільно похідні ідентифікатори.

Наслідок: відкрити й перезберегти без жодних змін — і жодного діфу не виникне, а двоє людей, що додають той самий запит у те саме місце, створюють сутності, які злиття вміє зіставити.

Git ▸ Історія відкриває подання з двома панелями: перелік комітів із жолобом гілок і подробиці праворуч. Контекстне меню коміту дає змогу отримати цю версію.

Чотири інструменти у виданні Pro: git_commit_push (крок 1 із 2 — повертає токен перегляду, заголовок, тіло й різницю за сутностями, нічого не записуючи), git_confirm_push (крок 2 із 2 — відхиляється, якщо проєкт змінився після перегляду), git_pull і git_resolve_conflicts.

Поділ на два кроки зроблено навмисне: агент не може надіслати зміни, доки різницю не буде спершу показано.