Obsidian и Git-репозитории

Всем привет, уверен, что многие участники сообщества пользуются связкой Obsidian и Git. Я сам, например, использую GitHub для попыток в коллективные базы знаний (подробнее вот в этой теме).

Было бы интересно узнать ваши мысли и лайфхаки по работе с этой связкой. Например, один из самых насущных для меня:
какие файлы добавляете в .gitignore? Я добавил .obsidian/workspace, но проблемы с синхронизацией иногда всё равно вылезают.

Уверен, что это всё где-то на форумах Obsidian описано, но думаю будет не лишним на нашем форуме отдельно обозначить лучшие практики :slight_smile:

.obsidian/workspace в любом случае надо добавлять в исключения любого из вариантов синхронизации, кроме родного Sync, где это и так учитывается.

Отдельные плагины могут содержать свои варианты временных JSON-файлов. Вероятно их надо тоже добавлять в исключения.

Также можно искользовать разные конфиги для разных устройств, тогда можно вообще исключить из синхронизации всю директорию настроек и плагинов на разных устройствах.

1 лайк

Как быстро открыть заметку из Obsidian в веб-интерфейсе гитлаба/гитхаба

Я иногда хочу посмотреть, как мою заметку отрендерит гитлаб.

Плагин Obsidian Templater позволяет перейти в браузер одним нажатием клавиш (ну, после того, как его настроить :wink:)

  1. Идем в настройки темплейтера и добавляем User Function. Имя выбираем open_on_remote, а в качестве скрипта пишем примерно следующее: firefox <my_git_repo_http_address>/blob/master/<%tp.file.path(true)%> (<my_git_repo_http_address> — адрес вашего репозитория с заметками)

  2. Создаем новый шаблон для темплейтера (если не сделали этого раньше, нужно предварительно настроить, где темплейтер ищет шаблоны), называем его, к примеру, open_on_remote.md и добавляем в него одну строчку:

<%- tp.user.open_on_remote() %>
  1. Опционально, можно добавить сочетание клавиш на шаблон. Опять идем в настройки темплейтера, жмем «Add new hotkey for template», выбираем путь к шаблону open_on_remote.md и добавляем удобное сочетание клавиш.
1 лайк

Obsidian и git-репозитории

Почему гит, а не облако

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

Что лежит в репе

Все. Гит игнор пустой. папка .obsidian синхронизируется у меня полностью. Возможно, это неправильно, но оно работает. У меня одна та же конфигурация на всех трех десктопах. Мобильную не использую. В теории, ее можно вести в отдельной ветке. Не задумывалась об этом. После того, как настроила под себя обсидиан в папке обсидиана у меня меняется лишь список плагина recent-files.

Что не стоит хранить в репе

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

Remote

Моим самым первым ремоте для заметок был Битбакет. Это было еще в то время, когда гитхаб давал приватные репозитории за деньги.
Сейчас мой remote - сервер с Gitea. Минималистично и просто.

Коммиты

Чаще всего се коммичу перед уходом домой в пятницу)))
Коммит с однотипным сообщением kb.

GUI для гита

Нет. Я не из тех, кто плюется при виде гуишных клиентов для гита и предпочитает только консоль. Посмотреть диф, закоммитить или пушануть не глядя - открываем gui и не выпендриваемся с консолью =)
Использовала GitKraken. Отличная вещь.
Но в бесплатной версии он запрещает использовать собственные инстансы гита.
После долгих поисков нашла Git cola.
Download git-cola

Вот, наверное, и все. Больше добавить мне нечего.

5 лайков

Я вот раздумываю над тем, чтобы базу свою один или пару разочков на ГИТ заливать, как лучше всего настроить процесс? Есть простой совет и чем коммитить?

Git Cola GUI-приложение, достаточно простое.
Сам процесс.
Внутри папки инициализируем гит-репозиторий.
Через приложение создаем первый коммит.
Добавляем remote (удаленный репозиторий)
Делаем пуш в репозитоий.
На другом компьютере делаем pull и выкачиваем себе информацию.

Я настроил git-annex, так что у меня версионируются и бинарники. git сохраняется в github, git-annex сохраняется отдельно, но тоже автоматизировано. Детальнее про свою конфигурацию, я писал в своём блогпосте Идеальные заметки или мой путь к Обсидиану (Perfect notes or My journey to Obsidian) - #5 от пользователя Rustam

В общем первый интересный факап.

Сменил ноут, восстановил все из резервной копии. Этот козленок последнюю копию делал два дня назад. Я не посмотрел. Ну думаю Бог с ним. Облако то должно быть облаком.

А не фига, он обновил файлы сразу после восстановления. Ох, как я скакал утром, чтоб восстановить все за два дня. Слава Богу старый ноут стоял рядом и ждал своего часа. Все вмиг выдернул.

Интересно, такое с гитом невозможно?

Надо делать бэкапы :floppy_disk: это был звоночек.

Ну да, как бы намекает, что я сам дебил. Но вот какой вопрос, вдруг возник, а как обстоит дело с гитом? Он же поддерживает версионность. То есть гипотетически, при наличии нежелательного обновления – он должен иметь в истории версий старый файл и в случае чего восстановить его без проблем. Правильно?

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

1 лайк

Плагин GitHub - denolehov/obsidian-git: Backup your Obsidian.md vault with git сам коммитит, сам рушит, ничего руками делать не надо

к нему бы еще инструкцию нормальную. Для разрабов =)

Да. Если делать всё в одну ветку (чего, ИМХО, обычно хватает для личных маленьких проектов), то всегда можно скопировать конкретный файл по его пути из некоторого коммита.

Сделать это можно так git - Как извлечь файл из ветки, не переключаясь на эту ветку? - Stack Overflow на русском

это можно сделать, например, с помощью команды show :

$ git show ветка:путь/к/файлу

содержимое файла , находящегося в каталоге путь/к/ , будет выведено программой git в stdout . чтобы записать этот вывод в файл новый/путь/к/файлу , можете воспользоваться такой примерно командой:

$ git show ветка:путь/к/файлу > новый/путь/к/файлу

вместо имени ветки, разумеется можно указать и имя метки и хэш коммита.

документация: man git-show

Чтобы посмотреть, какие были коммиты последние, можно ввести git log, выдаст список. Буквенно-цифровой код - хэш коммита. Можно использовать небольшое начало вместо всего хэша.

В случае с несколькими ветками тоже через git show можно, но ведь нужно получить хэш коммита сначала как-то, а он может быть на другой ветке, но если вручную разбираться не хочется, то можно воспользоваться каким-нибудь графическим интерфейсом к гиту.

Ну и про бэкап: бэкапить на условную флешку/в яндекс.диск нужно не только файлы с заметками, но и папку .git (она лежит в корне репозитория, в частности, для obsidian vault будет лежать прямо в папке этого vault (вернее, можно и в подпапке хранилища репозиторий начать, но непонятно, зачем)). В этой папке лежат коммиты репозитория.

Вот. Возможно, написал не очень ясно, но буду рад вопросам и уточнениям.

2 лайка

я использовал git синхронизацию с помощью плагина, в gitignore закинул только вот эти папки:

.obsidian/plugins/remember-cursor-position/cursor-positions.json
.obsidian/workspace.json

сейчас перешел на синхронизацию через SyncThing

2 лайка

Решил я написать свою инструкцию по синхронизации данных при помощи git

Почему-то мало кто знает что git позволяет делать файлы с изменениями в репозитории и передавать их отдельным файлом.

Делается это так

Выясняем c какого момента копировать - название резервной копии (это хэш коммита) командой

$ git log --oneline
32a9813a7 (HEAD -> master) резервное копирование: 16-05-2023 17:56:50
e7b39ea90 (16_05_23) резервное копирование: 15-05-2023 21:45:10
2c96acd44 резервное копирование: 15-05-2023 17:52:02
512f61d7b резервное копирование: 12-05-2023 18:02:36

вводим

git bundle create commits_15_05_23_work.bundle master ^2c96acd44

в случае этой команды он скопирует копию выше, начиная с e7b39ea90 в файл с названием commits_15_05_23_work.bundle

Распаковываем так. Заходим в репозиторий куда надо передать данные.

Сначала создаем отдельную ветку в репозитории, например так

git checkout -b 15_05_23

да именно отдельную ветку, сразу в общий репозиторий не получится (без изменения опций)

зайдя в ветку вводим

git pull commits_15_05_23_work.bundle master

commits_15_05_23_work.bundle - это имя файла готовой резервной копии

возвращаемся в главную ветку командой

git checkout master

потом объединяем ветку с основной

git merge 15_05_23

15_05_23 это название ветки которую вы создали

И все.

Кажется, долго, но это не так. Привыкнете быстро.
История сохраняется.
В других вариантах нужны были промежуточные сервера, а тут не нужны никакие сервера. Просто файл с изменениями передается любым путем на другой комп.