Привет, Хабр, меня зовут Александр Мачулин, я основатель Gramax, open source системы для ведения документации в подходе Docs as Code с визуальным редактором. Gramax хранит контент в git-репозитории. Это означает, что у пользователей могут возникнуть конфликты при синхронизации изменений. Я считаю, что нагружать пользователей решением конфликтов – не очень хорошо и пытаюсь найти решение для этой задачи.
В Notion недавно появился офлайн режим и я решил разобраться как он решает конфликты, когда пользователи отредактировали один и тот же контент. Как я понял, они подключили или используют логику библиотеки Automerge. Её основная суть – решение конфликтов для текстовых редакторов с поддержкой форматирования. И основаная задача, объединить изменения от несколькоих пользователей.
Пример со строкой «Привет, как дела?»:
Пользователь X вносит правку: «Привет, как дела?»
Пользователь Y вносит правку: «Привет, как дела?»
В результате получаем: «Привет, как дела?»
Вернёмся к решению конфликтов в Notion.
Меня интересует как будет работать, если один человек внёс значительные правки в текст, а другой человек этот контент удалил. Смоделировал несколько кейсов:
Я в офлайне редактировал блок текста, и его параллельно кто-то удалил.
Когда я вернусь в онлайн, то контент удалится на моих глазах насовсем и даже в истории изменений я не вижу своих правок.Я в офлайне редактировал статью, и её кто-то параллельно удалил целиком.
Аналогично прошлому кейсу, статья удалится, но я смогу найти её в Корзине с сохранёнными изменениями.
Т.к. Notion – это online first платформа, то такое решение допустимо, в связи с редкостью возникновения подобных ситуаций. Gramax local first и мы такое решение использовать не можем и будем исследовать дальше.
Если у вас есть идеи как удобно решать конфликты, то давайте обсудим их в комментариях!
