habrahabr

Obsidian+Github вместо Notion: синхронизация, бекап и версионность (3-в-1)

  • вторник, 17 сентября 2024 г. в 00:00:14
https://habr.com/ru/articles/843288/
Инфраструктура личных заметок (Obsidian + GitHub)
Инфраструктура личных заметок (Obsidian + GitHub)

О том, как сделать прозрачную синхронизацию заметок Obsidian между устройствами (Desktop, Android, iOS) через GitHub:

  • Без сторонних приложений (вроде iCloud, SyncThing, Termux и пр)

  • Бесплатно

  • Бонусом — резервная копия: как самих заметок, так и истории изменений.

В результате получается полноценная замена Notion: структурированные заметки с автоматической синхронизацией между устройствами.

Краткое решение
  • Приватный репозиторий GitHub

  • Синхронизация по https + "Personal access token"

  • Для десктопа: плагин Git

  • Для мобильных: плагин Fit

  • Автосинхронизация: при старте (Git), раз в минуту, без уведомлений.

  • исключить папку .obsidian через .gitignore

Далее: подробно ("для чайников")

Предыстория: Notion всё

Сейчас Notion в РФ работает только для бесплатных аккаунтов и только через прокси/VPN. Платные аккаунты забанили. Если зайти из бесплатного аккаунта и забыть включить прокси — выкинет из Notion, неудобно.

Но главное неудобство — Notion владеет моими заметками и может удалить их в любой момент. С Obsidian иначе: все заметки — это локальная папка с текстовыми файлами (их можно открыть множеством приложений).

Вопрос лишь в прозрачной синхронизации … и он решён в этой статье.

Предыстория: личный опыт

Несколько лет назад я загорелся идеей создать личную картотеку "zettelkasten". У меня эта методология не прижилась, но в результате я познакомился с приложением Obsidian, начал вести там свои заметки, и год назад полностью ушёл туда с Notion.

Мой главный аргумент — я владею своими заметками, а не корпорация. Заметки хранятся в папке с текстовыми файлами. Они не пропадут, если кто-то так решит.

Про сам Obsidian на Хабре уже писали, например:

Но для меня Obsidian не был заменой Notion, пока я не научился синхронизировать его на всех устройствах без сторонних костылей программ.

Ниже - пошаговый алгоритм, с которым всё точно работает.

Шаг 0: Установить Obsidian на все свои устройства

На случай если его у вас ещё нет, вот ссылка:

Шаг 1: Создать приватный репозиторий Github

  1. Залогиниться на github

  2. По ссылке https://github.com/new указать:

    • имя репозитория

    • выбрать: приватный

    • выбрать: файл README (т.к. репозиторий не д.б. пустым)

  3. создать репозиторий (зеленая кнопка внизу)

  4. в корне репозитория создать файл .gitignore с текстом .obsidian

Настройки нового репозитория на GitHub
Настройки нового репозитория на GitHub
Создание .gitignore (1/2)
Создание .gitignore (1/2)
Создание .gitignore (2/2)
Создание .gitignore (2/2)

Комментарий: файл .gitignore нужен, чтобы не синхронизировать папку .obsidian, в которой находятся локальные настройки (конфликтуют на разных устройствах при синхронизации). Если этого не сделать — вся схема перестанет работать.

Шаг 2: Создать токен доступа

  1. По ссылке https://github.com/settings/tokens/new указать:

    • имя токена

    • выбрать: No Expiration (значит токен не устареет)

    • выбрать repo

  2. создать токен (зеленая кнопка)

  3. сохранить созданный токен

    • GitHub покажет токен вида ghp_1wKdGc4IhVCHxXEaKClMNp1rEMwsHu1f5zNZ только один раз, его нужно скопировать и сохранить. Если потеряется - придётся создавать новый.

Настройки "простого" токена доступа
Настройки "простого" токена доступа
Только для "параноиков"

Созданный токен даёт доступ ко всем личным "репозиториям" на гитхабе. Если у вас уже есть репозитории на гитхабе и вам *некомфортно* с таким токеном, то есть два решения:

  1. Создать "продвинутый" токен:

    • токену выдать права на конкретный репозиторий "Repository permissions - Contents: Read and Write"

    • указать срок жизни токена 1 год (это максимум, через год придётся обновлять, неудобно)

  2. Более простой вариант: создать отдельный github-аккаунт для обсидиана и использовать "классический" токен.

Шаг 3: Синхронизация с десктопом (Windows, Linux, Mac)

Приведу пример для Windows.

3а: клонировать репозиторий

  1. Убедиться, что git установлен в системе

    • в консоли набрать git --version и увидеть версию.

    • если вылезла ошибка — установить гит: https://git-scm.com/downloads

  2. Создать папку, в которой будут храниться «Vaults/Хранилище» Obsidian (Vault — это аналог Workspace в Notion). Например: C:/OBSIDIAN (win) или ~/OBSIDIAN(linux).

  3. Собрать https-ссылку, по которой будет синхронизироваться github

    • Формат ссылки: https://<PERSONAL_ACCESS_TOKEN>@github.com/<USERNAME>/<REPO>.git,

    • Например: https://ghp_1wKdGc4IhVCHxXEaKClMNp1rEMwsHu1f5zNZ@github.com/myaccount/my-obsidian-vault.git

  4. Запустить консоль (cmd.exe в windows)

    • в консоли перейти в папку OBSIDIAN (cd /OBSIDIAN) и оттуда выполнить команду с собранной ссылкой git clone https://<PERSONAL_ACCESS_TOKEN>@github.com/<USERNAME>/<REPO>.git

В результате появится папка OBSIDIAN/my-obsidian-vault, а в ней файлы из GitHub (README.md и .gitignore, а также папка .git с настройками гитхаба)

3b: создать Хранилище/Vault в Obsidian на основе скаченной папки

Создание нового Хранилища/Vault в Obsidian
Создание нового Хранилища/Vault в Obsidian
  1. Из программы Obsidian: открыть синхронизированную папку my-obsidian-vault как хранилище

  2. Теперь можно заполнить "хранилище" заметками и файлами, или просто отредактировать README.md

Если у вас уже есть заметки в Obsidian, то алгоритм будет тот же:

  • сначала создать и синхронизировать пустой репозиторий с github

  • затем скопировать туда все файлы из старого хранилища

3с: Настроить синхронизацию через obsidian-плагин 'Git'

Плагин Git в Obsidian (1/4) - поиск и установка
Плагин Git в Obsidian (1/4) - поиск и установка
  1. В настройках Обсидиана, в разделе "Community plugins" найти и установить плагин 'git'

  2. Далее, в настройках самого плагина git, установить:

    • Vault Backup Interval (minutes): 1

    • Auto Backup after stopping file edits: ВКЛ

  3. Pull updates on startup: ВКЛ

  4. Disable notifications: ВКЛ (можно не включать, но тогда каждую минуту будут появляться уведомления)

Плагин Git в Obsidian (2/4) - настройка
Плагин Git в Obsidian (2/4) - настройка
Плагин Git в Obsidian (3/4) - настройка
Плагин Git в Obsidian (3/4) - настройка
Плагин Git в Obsidian (4/4) - настройка
Плагин Git в Obsidian (4/4) - настройка

Теперь все заметки из этого хранилища, каждую минуту после завершения редактирования, будут загружаться в Github. Также, при запуске Obsidian, последняя версия заметок сразу подгрузится с GitHub.

Если не хочется ждать минуту, то принудительно загрузить изменения на GitHub можно через Obsidian-команду "Git: Create backup": CTRL+P, git b. Также (в настройках Obsidian) можно создать горячую клавишу для этой команды (например, ALT+S)

Шаг 4: Синхронизация с мобильным (Android, iOS)

Здесь всё проще, чем на десктопе:

Поиск и установка плагина Fit в мобильном
Поиск и установка плагина Fit в мобильном
  1. Открыть приложение Obsidian

  2. Создать новый пустой Vault/Хранилище (не создавать в нём файлы)

  3. Внутри Obsidian найти и установить community-плагин "Fit"

  4. В настройках плагина:

    • вставить Токен (из шага 1). Именно токен, не url.

    • авторизоваться по кнопке "Authenticate user"

    • Github repository name: выбрать из списка, например: my-obsidian-vault

    • Branch name: выбрать main. (тут без вариантов)

    • Auto sunc: выбрать Muted

    • Auto check interval: установить 1 минуту

    • File change: нажать, чтобы кнопка не горела (и не спамила каждую минуту).

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

Недостатки плагина Fit версии v1.1.1

Кнопка с котиком для принудительной синхронизации через плагин Fit
Кнопка с котиком для принудительной синхронизации через плагин Fit

К сожалению, плагин Fit (пока ещё) не умеет делать автосинхронизацию "при старте".

Поэтому, сразу после запуска, чтобы не ждать минуту, можно подтянуть изменения через кнопку с котиком "Fit Sync".

Также, в текущей версии плагина есть один "баг": если на десктопе удалить ненужную папку-с-файлами (и синхронизировать репозиторий), то на мобильном файлы удалятся, но пустая папка останется ... и её придётся удалить вручную. Неудобно, но такой сценарий случается довольно редко. Плюс есть шанс что автор плагина исправит этот баг.

При этом у плагина есть бесспорное достоинство: работает на мобильном.

Шаг 5: техника безопасности

Не редактируйте один и тот же файл одновременно на двух устройствах.

Впрочем, этот совет относится и к Notion: я однажды терял часть текстов в Notion, когда заметка была открыта в нескольких местах

На самом деле, следовать этому совету легко.

А если что-то пойдёт не так, то Obsidian сообщит о конфликте версий, и с ним придётся разбираться (в то время как Notion молча как-то всё решит сам)

  • На десктопе конфликт версий разрешается средствами GIT-а.

    • Если кратко: то достаточно отредактировать "конфликтный" файл и удалить из него ненужные строки (в т.ч. служебные), чтобы всё пришло в норму.

    • а если одновременно редактировались разные строки заметки, то умный git разрулит всё сам (корректно, незаметно, автоматически)

  • На мобильном конфликт решается иначе: локальный файл не меняется, но его "внешняя" копия появляется в папке _FIT. Нужно смотреть глазами и решать головой, что оставить и что поменять в оригинальном файле.

Ещё раз: конфликт версий заметки — это форс-мажор, скорее всего вы никогда с ним не встретитесь (если не будете редактировать одну и ту же заметку одновременно на двух устройствах). А если встретитесь — его легко разрулить.

Вопросы и ответы:

Почему на мобильных используется плагин Fit, а не полноценный Git?

Мобильные приложения не могут вызывать другие мобильные приложения, поэтому плагин Obsidian не может вызвать стороннее приложение Git на мобильном.

Плагины Obsidian написаны на JS. В мобильном плагине obsidian-git есть JS-реализация полноценного гит-а… но она ещё сырая (тормозит на большом количестве файлов и спамит алертами).

Поэтому для мобильных устройств приходится использовать не полноценный Git, а плагин Fit, который использует упрощённый GitHub API.

Почему на десктопе используется плагин Git, а не простой Fit?

Тут две причины:

  • хранение всей истории изменений на локальной машине (в папке .git)

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

Можно ли использовать только мобильную версию (без десктопа)

Да, вполне. Шаг 3 можно пропустить - всё будет работать.

Правда десктопная версия даёт дополнительную резервную копию с историей изменений (хранится на десктопе), но если отказаться от десктопа — система продолжить работу.

Также можно отказаться от мобильной версии и работать только на десктопе (но зачем?:)

Почему бы не синхронизировать всё через сторонние приложения (например, SyncThing)?

  • они требуют внимания (надо следить, что ничего не отвалилось)

  • они разряжают батарею (на мобильных)

  • они гоняют больше трафика (на мобильных)

  • синхронизация через них происходит чуть дольше

  • самое главное: они не хранят историю всех изменений (как это делает git в локальной папке .git и на github)

Здесь же всё в одном приложении: запустил Obsidian — синхронизация идёт; закрыл — не идёт.

Где смотреть историю изменений файлов?

История изменений файла на GitHub
История изменений файла на GitHub

Если вы не сильны в git (как и я), то историю изменений любого файла можно посмотреть на сайте github (для каждого файла справа-вверху есть кнопка "🕓History").

Что делать, если GitHub однажды перестанет открываться из РФ?

Действительно, плагин Fit жестко привязан к API GitHub-а.

Но тут как в той притче - "или ишак подохнет, или падишах…".

  • Скорее всего к этому моменту допилят мобильный плагин Obsidian-Git. И тогда можно будет использовать любой git-сервер (даже свой собственный).

  • Или допилят плагин Fit (или создадут новый) для работы с каким-нибудь опенсорс-сервисом.

  • или действовать по-старинке:

    • Android: синхронизироваться через внешнее приложение "Termux", внутрь которого можно установить полноценный git (инструкция гуглится)

    • iOS: синхронизироваться через iCloud

  • наконец, у Obsidian есть свой сервис синхронизации за $4 в месяц. Правда к нему хорошо-бы прикрутить дополнительный бекап.

В январе я уже предсказывал замедление youtube. Так что побуду предсказателем ещё раз. Так вот: гитхаб в ближайшие годы останется доступным (ну а вдруг:)

Что ещё можно сделать с этой схемой?

  • В Obsidian можно использовать несколько Хранилищ/Vaults (аналог Workspace в Notion), и под каждое создать свой репозиторий на гитхаб. Правда синхронизацию придётся настраивать отдельно для каждого: в Obsidian плагины устанавливаются внутрь Vault, а не в приложение в общем.

  • Если есть свой сервер — можно настроить ещё один бекап: резервное копирование репозитория GitHub по расписанию через git.

Минутка здравого смысла

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

При чём здесь Obsidian?

Дело в том, что реализовываться (по своим ценностям) у человека получается только из состояния владения своей жизнью (когда ощущаешь право и способность влиять). А воспитывается способность владеть и влиять всегда с мелочей, в том числе через владение результатами своего творчества. В том числе через владение личными документами.

А современную ситуацию — где корпорации пытаются распоряжаться контентом авторов и фактически предлагают им отказаться от права владения — я рассматриваю лишь как временный перекос и "болезнь роста" нашей цивилизации.

При этом хочу разделить понятия "владение" и "управление": очень удобно, когда получается делегировать управление ресурсом, но продолжать оставаться хозяином. Правда вот в данной инструкции эти две роли пришлось совместить: самому управлять и самому владеть.

В общем, признание и реализация ценности "владения" — это тренд. Пока ещё небольшой, но — по моим наблюдениям — он показывает уверенный рост.

Так что если вы решите вернуть себе право распоряжаться своими заметками с помощью Obsidian — вы знаете что делать.