Всем привет, в этом небольшом гайде расскажу как я синхронизирую свои заметки Obsidian сохраняя все 4 свойства. Мне кажется это золотой стандарт для настройки синхронизации Obsidian и в этом гайде поэтапно расписал как провернуть эту схему у себя.
С чем имеем дело:
редактор заметок, в моём случае Obsidian, но подойдёт любой; в Obsidian есть плагин который упростит работу с Git до пары кнопок
git и git хранилище, я использую GitHub, но можно GitLab, Codeberg или любой другой
git-crypt — утилита для прозрачного шифрования файлов прямо внутри репозитория
gpg — для генерации асимметричных ключей; если не хочется заморачиваться, можно обойтись симметричным
.binключомплагин obsidian git — чтобы пушить и пуллить прямо из Obsidian, без терминала
Как это всё работает: git-crypt цепляется к Git через фильтры clean и smudge. При git add файл шифруется AES-256 и уходит на сервер в виде нечитаемого бинарника. При git pull — расшифровывается обратно. Ты работаешь с обычными markdown файлами, шифрование происходит незаметно. Плагин Obsidian Git просто вызывает стандартные git-команды изнутри Obsidian, поэтому с git-crypt работает без каких-либо проблем.
установка
sudo pacman -S gnupg git-crypt
Debian/Ubuntu
sudo apt install gnupg git-crypt
Сначала фиксим права на папку, без этого gpg иногда ругается
chmod 700 ~/.gnupg find ~/.gnupg -type f -exec chmod 600 {} \; find ~/.gnupg -type d -exec chmod 700 {} \;
Создаём ключ
gpg --full-generate-key
В меню:
тип 1 - rsa
размер 4096
срок 0 - не истекает
имя и email
придумываем пароль - пароль понадобится при каждом git-crypt unlock
Смотрим что создалось
gpg --list-secret-keys --keyid-format long
sec rsa4096/BC1669B94DC2FA3B 2026-03-10 [SC] A24F8B816C123B0B342234555C2ACA254BC1669B uid user <mail@email.com>
email отсюда понадобится на следующем шаге
По желанию можно настроить кэш пароля на 24 часа, чтобы не вводить при каждом unlock
echo "default-cache-ttl 86400" >> ~/.gnupg/gpg-agent.conf echo "max-cache-ttl 86400" >> ~/.gnupg/gpg-agent.conf gpgconf --reload gpg-agent
Репозиторий
cd ~/notes git init git-crypt init git-crypt add-gpg-user --trusted mail@email.com
Создаём .gitignore исключаем системные файлы Obsidian которые не нужно синхронизировать
.obsidian/workspace.json .obsidian/workspace-mobile.json .obsidian/cache .trash/
Создаём .gitattributes говорим git-crypt что шифровать а что нет
.gitattributes !filter !diff .gitignore !filter !diff *.md filter=git-crypt diff=git-crypt *.canvas filter=git-crypt diff=git-crypt *.png filter=git-crypt diff=git-crypt *.jpg filter=git-crypt diff=git-crypt *.jpeg filter=git-crypt diff=git-crypt *.pdf filter=git-crypt diff=git-crypt
Порядок коммитов важен, сначала только .gitattributes потом остальное. Если закоммитить всё разом, git-crypt не успевает применить фильтры и файлы уйдут в открытом виде:
git add .gitattributes git commit -m "$(date '+%Y-%m-%d %H:%M')" git add . git commit -m "$(date '+%Y-%m-%d %H:%M')"
Проверяем статус шифрования
git-crypt status | grep WARNING
Пушим
git remote add origin git@github.com:username/notes.git git branch -M main git push -u origin main
Obsidian Git плагин
Открываем Obsidian, идём в Settings → Community Plugins → Browse, ищем Git (автор Vinzent), устанавливаем и включаем.
В настройках плагина настраиваем как нам удобно.
Теперь плагин сам тянет изменения при запуске Obsidian и автоматически коммитит и пушит по расписанию.
Вручную можно через Ctrl+P "Obsidian Git: Commit-and-sync" или кнопку в интерфейсе.
Важно: открывать Obsidian только после git-crypt unlock в терминале. Если открыть раньше — увидишь GITCRYPT... вместо заметок, плагин будет пытаться запушить мусор. Закрыть Obsidian, разблокировать в терминале, открыть снова.
Pre-commit хук
Хук блокирует коммит если файлы которые должны быть зашифрованы идут в открытом виде. Создаём файл .githooks/pre-commit
mkdir -p .githooks touch .githooks/pre-commit chmod +x .githooks/pre-commit
.githooks/pre-commit
#!/bin/bash for file in $(git diff --cached --name-only); do if git check-attr filter "$file" | grep -q "git-crypt"; then string=$(git show ":$file" 2>/dev/null | head -c 9) if [ "$string" != $'\x00GITCRYPT' ]; then echo "file '$file' is not encrypted man be carefully" exit 1 fi fi done exit 0
git config core.hooksPath .githooks git add .githooks/pre-commit git commit -m "$(date '+%Y-%m-%d %H:%M')"
Перенос на другое устройство
На старом устройстве:
gpg --export-secret-keys --armor mail@email.com > ~/key.asc
Копируем на новое через scp или флешку. На новом:
gpg --import ~/my-gpg-key.asc git clone git@github.com:username/notes.git cd notes git-crypt unlock
Удаляем файл ключа с обоих устройств:
rm ~/my-gpg-key.asc
Открываем Obsidian, выбираем "Open folder as vault", указываем папку с клонированным репозиторием. Устанавливаем плагин Obsidian Git, выставляем те же настройки.
Бэкап GPG ключа
Без ключа и пароля доступ к заметкам потерян навсегда
gpg --export-secret-keys --armor mail@email.com > ~/backup-gpg.asc
Кладём в менеджер паролей или на внешний диск, после этого удаляем
rm ~/backup-gpg.asc
Cимметричный ключ без GPG
Если не хочется разбираться с GPG git-crypt умеет работать с обычным .bin ключом.
git-crypt export-key ~/key.bin
Удобный хак переводим его в base64 и храним как строку в менеджере паролей, не нужно таскать бинарный файл
base64 -i ~/key.bin
На новом устройстве:
echo "base64 string" | base64 -d > key.bin git-crypt unlock key.bin
Минус: ключ не защищён паролем, если строка утечёт из менеджера паролей, заметки расшифруются.
Комментарии (25)

meshk0ff
10.03.2026 19:23Еще можно с помощью Syncthing синхронизировать

diomas
10.03.2026 19:23С syncthing (как наверное и с любой синхронизацией, где синхронизируется файл целиком) неприятный момент: если на одном устройстве создана какая-нибудь daily-заметка с содержимым, вы переключаетесь на другое устройство и открываете обсидиан до того как произошла синхронизация, то обсидиан создает дайли-заметку с таким же именем файла, но пустую и позже, когда syncthing все-таки синхронизирует, он оставит пустой файл как более свежий, а файл с содержимым пометит как conflict. При этом в обсидиане вы так и будете наблюдать пустую заметку и возможно пропустите то, что у вас там конфликт.

winorun
10.03.2026 19:23У меня таблица конфликтов есть, если она не пустая запускаем diff. Формат текстовый объединить конфликты легко.

acyp
10.03.2026 19:23Я создаю дэйли-заметки с минутами в имени. Вероятность создать заметки с одинаковыми именами резко снижается. Ну или для спидигонщиков: секунды в имени. В этом варианте можно вляпаться только умышленно.

meshk0ff
10.03.2026 19:23Да, есть такое. Хотя сам сталкивался с таким конфликтом всего лишь раз, в остальных случаях синхронизация успевала, но тут конечно от сценария использования еще зависит.

LeshaRB
10.03.2026 19:23Я когда пользовался обсидиан, на компе стоял GoodSync. А на телефоне Foldersync. И всегда надо было держать в памяти, что сперва сделать синхронизацию
Потом купил подписку UpNote, где это все из коробки

dshemin
10.03.2026 19:23Сейчас настаиваю и буду экспериментировать с Obsidisn + плагин LiveSync + Couchdb. По первому впечатление - работает достойно, но требует наличия своего сервера, чтобы развернуть couchdb. Плагин умеет в шифрования /дешефрование так, что можно и шареную couchdb использовать.

evstropov_dv
10.03.2026 19:23Одновременная работа возможна? Есть ли какие ограничения в этом? Хочу сбежать с onenote

mopsicus
10.03.2026 19:23Давно использую Syncthing, синхронизация макбуком, смартфоном и vps. Всё отлично работает.

evstropov_dv
10.03.2026 19:23Одновременная работа возможна? Есть ли какие ограничения в этом? Хочу сбежать с onenote

mopsicus
10.03.2026 19:23Ну это ж апп для ведения заметок/базы знаний в соло. При одновременном редактировании одного дока могут быть конфликты, если это имеется ввиду. Но есть куча плагинов, например Relay, он вроде бы решает эту задачу.

cuursivve
10.03.2026 19:23А что насчёт iOS в этой схеме? Вроде бы для Syncthing нужна фоновая работа приложения, а iOS это не допускает

mopsicus
10.03.2026 19:23Не особо вникал, у меня андроид. Но для айос вроде есть неофициальный клиент: https://github.com/pixelspark/sushitrain

error911
10.03.2026 19:23Что то я тоже не понял, что с чем и зачем синхронизировать? если обсидиан уже сам по себе поддерживает синхронизацию. Выглядит как - прикручиваем к велику второе колесо.

Dolby
10.03.2026 19:23Ээм а нафига так сложно? Я например сделал синхро через nextcloud, в настройках обсидиана указал адрес сервера, выставил периодичность синхронизации и все норм работает

SignFinder
10.03.2026 19:23Remotely-save или remotely-sync
Данные шифруют, основные публичные облака поддерживают

Titsubishi
10.03.2026 19:23Тестил, но все делается куда проще:
https://habr.com/ru/articles/845900/
Спасибо, Автор, но ты как-то сложно о простом:
1) можно обойтись без сложных команд, а простым юзерам так вообще не понятно что к чему
2) это все только пока GitHub нам отключат
3) у GitHub есть ограничение по занимаемому месту и оно сильно меньше того, что может дать любой бесплатное облако.
4) про git ignore молодец, что написал, но все же, лично от себя, рекомендую сохранять все конфиги, особенно если на одинаковых ОС работаешь - каждый раз переустанавливать плагины такое себе.
dimonier
Между чем синхронизируете?
Чаще всего синхронизируют хранилище между компьютером и телефоном. На телефоне это взлетит?
Iscander_Che
Вот тот же вопрос.
CrazyOpossum
Через termux можно, но геморрно - нужно не забывать регулярно коммитить, ещё и с консоли в андроиде. У себя на vps давно развернул wireguard+syncthing - качество жизни сильно улучшилось, заодно поскидывал туда всякие user.js, базу keepass и т.п. - всё равно сервак непубличный. Даже не обязательно включать/выключать wireguard на телефоне для разного сёрфинга - dante на сервере, foxyproxy в мобильной лисе с нужными настройками и wg всегда онлайн.
xpltt Автор
Поэтому и существует obsidian-git, чтобы коммитить сразу через интерфейс без консоли. На android, как и на пк, работает нормально
Hrodvitnir
Только если хранилище маленькое
У меня на тыще файлов регулярно отваливался
xpltt Автор
Да можно
Через termux, там есть и git, и git-crypt всё ставится и работает