Вот есть утилиты для двунаправленной синхронизации ящиков электронной почты - mbsync, offlineimap. Они позволяют совершать параллельные изменения над разными копиями, при этом копии равноправны и слияние изменений происходит автоматически. Например, ящик на главном почтовом сервере и копии на рабочих станциях, и везде пользователь может вносить правки. При этом нет существенной разницы, есть ли «главный» почтовый сервер, или рабочие станции синкаются между собой. Как я понимаю, это фишка используемого алгоритма слияния, 3-way merge. Понятно, что можно сделать такие вещи, которые невозможно трактовать однозначно, такие конфликты должны разруливаться руками (но вышеназванные утилиты, видимо, молча принимают решение сами, при этом не всегда получается то, что пользователь хотел бы).
Вопрос - почему такой же подход не используется для дисков с данными, которые должны быть синхронизированы между компьютерами?
Практический пример. Например, есть ноутбук и стационарный компьютер, и на всех компах есть каталог с нужными-важными данными, и на каждом компьютере нужна актуальная копия всех данных, при этом пользователь добавляет, удаляет и редактирует файлы на обеих рабочих станциях попеременно, при этом по разным причинам рабочие станции не всегда могут непрерывно общаться по сети (пользователь на выезде, свет выключили, не работает связь по сети...). При этом нужно следить за тем, чтобы имелись актуальные резервные копии, поэтому, если каталоги с данными будут автоматически синкаться между компьютерами, пользователь будет доволен. А конфликты пусть программа обнаруживает сама, и спрашивает пользователя, как их разрулить, при этом продолжая синхронизацию в фоне.
Git, конечно, рулит, но с его помощью трекать файлы даже на отдельном компьютере - уже боль (по опыту треканья корневой ФС на VPS), а уж на нескольких компах - боюсь, юзера быстро достанет обилие ручных действий, хотя они и заключаются в commit, pull --rebase и периодической подрезке истории. Если же Git, то нужен чёткий workflow и, желательно, скрипты для стандартных действий. Есть ли в готовом виде хотя бы таковой workflow? Интересно было бы услышать истории из личного опыта.
Написав текст этого поста, обнаружил, что есть нечто под названием git-annex. Если кратко, то оно трекает файлы git-ом, не трекая файлы в git :) Кто-нибудь пользовался?
Самый главный вопрос у меня не в том, какая софтина так умеет уже сейчас, а в том, верно ли я понимаю данный вопрос и верно ли оцениваю возможности известных алгоритмов. Если софтины нет, а алгоритмы - есть, то не проблема софтину создать.
Спасибо за ваше время, затраченное на прочтение этого многословного вопроса. Заранее благодарю за разумные комменты по делу.