Найти в Дзене
Паша шКОДит

Бесплатная синхронизация Obsidian

В продолжение статьи про Obsidian, хочу рассказать о том, как настроил синхронизацию между устройствами. Я работаю на Windows на двух устройствах ПК и ноутбук. Теперь рассмотрим подробнее сам скрипт и как его добавить для регулярного выполнения в Windows. # obsidian_repo_commit.ps1 $RepoPath = "D:\obsidian" # Укажите путь к репозиторию $CommitMessageTemplate = "dd/MM/yyyy HH:mm daily" # Проверяем, существует ли репозиторий if (!(Test-Path $RepoPath)) { Write-Error "Репозиторий не найден: $RepoPath" exit 1 } # Переходим в репозиторий Set-Location $RepoPath # Проверяем, что это git-репозиторий if (!(Test-Path ".git")) { Write-Error "Не git-репозиторий: $RepoPath" exit 1 } # Формируем сообщение коммита $date = Get-Date -Format "dd/MM/yyyy HH:mm" $commitMessage = $CommitMessageTemplate -replace "dd/MM/yyyy HH:mm", $date # Выполняем git pull --rebase git pull --rebase # Проверяем, есть ли изменения для коммита $changes = git status --porcelain if ($changes) { Write-Host "Найдены изменения
Оглавление

В продолжение статьи про Obsidian, хочу рассказать о том, как настроил синхронизацию между устройствами.

История коммитов
История коммитов

Я работаю на Windows на двух устройствах ПК и ноутбук.

Схема синхронизации:

  • файлы Obsidian хранятся в git-репозитории, который выгружается в приватный репозиторий на Github
  • каждые 5 минут встроенными средствами Windows вызывается скрипт, который проверяет наличие изменений, делает commit и push

Теперь рассмотрим подробнее сам скрипт и как его добавить для регулярного выполнения в Windows.

1. скрипт синхронизации изменений obsidian_repo_commit.ps1

# obsidian_repo_commit.ps1
$RepoPath = "D:\obsidian" # Укажите путь к репозиторию
$CommitMessageTemplate = "dd/MM/yyyy HH:mm daily"
# Проверяем, существует ли репозиторий
if (!(Test-Path $RepoPath)) {
Write-Error "Репозиторий не найден: $RepoPath"
exit 1
}
# Переходим в репозиторий
Set-Location $RepoPath
# Проверяем, что это git-репозиторий
if (!(Test-Path ".git")) {
Write-Error "Не git-репозиторий: $RepoPath"
exit 1
}
# Формируем сообщение коммита
$date = Get-Date -Format "dd/MM/yyyy HH:mm"
$commitMessage = $CommitMessageTemplate -replace "dd/MM/yyyy HH:mm", $date
# Выполняем git pull --rebase
git pull --rebase
# Проверяем, есть ли изменения для коммита
$changes = git status --porcelain
if ($changes) {
Write-Host "Найдены изменения. Коммитим: $commitMessage"
git add .
git commit -m "$commitMessage"
git push origin HEAD
} else {
Write-Host "Изменений нет. Коммит не требуется."
}
Exit

2. скрипт-обертка, который мы будем запускать, чтобы не отображалось окно консоли при каждом выполнении (не забываем указать корректный путь до первого скрипта)

Set WshShell = CreateObject("WScript.Shell")
WshShell.Run "powershell.exe -ExecutionPolicy Bypass -File ""D:\scripts\obsidian_repo_commit.ps1""", 0, False
Set WshShell = Nothing

3. добавляем выполнение скрипта через "Планировщик задач" (Win+R, taskschd.msc, "Выполнить").

Можно создать новую папку для нашей задачи

Создание отдельной папки под кастомные скрипты
Создание отдельной папки под кастомные скрипты

Затем нажимаем ПКМ на новой папке, выбираем "Создать простую задачу" и вводим название

Указание имени задачи
Указание имени задачи

Выбираем триггер "При входе в Windows"

Выбор триггера для задачи
Выбор триггера для задачи

Действие "Запустить программу"

Выбор действия для задачи
Выбор действия для задачи

В качестве программы выбираем wscript.exe и в качестве аргумента указываем путь до vbs-файла, который мы создали на втором шаге

Указываем скрипт для выполнения
Указываем скрипт для выполнения

Ставим галочку для открытия свойств после создания задачи и нажимаем "Готово"

Финальный экран создания задачи
Финальный экран создания задачи

В открывшемся окне отмечаем галочку "Скрытая задача"

Скрытие задачи при выполнении
Скрытие задачи при выполнении

На вкладке "Триггеры" выбираем наш триггер и уточним, что нужно повторять его каждые 5 минут, бесконечно. Также можно указать конкретного пользователя, если на ПК работают несколько человек.

Настройка периодичности запуска задачи
Настройка периодичности запуска задачи

На вкладке "Условия" можно выключить опцию "Запускать только при питании от электросети" для корректной работы на ноутбуке.

Настройка выполнения задачи на ноутбуке
Настройка выполнения задачи на ноутбуке

Дополнительные опции доступны на вкладке "Настройки"

Настройка поведения задачи в случае ошибок
Настройка поведения задачи в случае ошибок

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

Пользуйтесь на здоровье и пишите, если знаете более простой и универсальный способ.