옵시디언 GIT - 충돌 방지 동기화용 배치파일 스크립트
여러 PC에서 옵시디언을 사용중인데, 동기화를 Git 플러그인을 이용하면 충돌이 나는 일이 종종 있습니다. (conflict-files-obsidian-git.md) 이는 Git 동기화가 옵시디언에 구동된 문서의 라이프사이클과 맞지 않을 때, 또는 여러 pc에서 각각 동일한 경로의 새 파일을 생성한 경우 주로 발생합니다.
이 스크립트는 Windows 환경에서 전자의 경우에 충돌 가능성을 줄여주는 방법입니다.
Git 설치
이 방법은 깃 명령어를 옵시디언 외부에서 사용하는 방법입니다. 따라서 Git을 Windows에 설치해야 합니다.
-
Git 설치하기:
- Git 공식 웹사이트에서 Windows용 Git 설치 프로그램을 다운로드합니다 https://git-scm.com/downloads/win
- 다운로드한 설치 프로그램을 실행합니다
- 설치 과정에서 대부분 기본 설정을 그대로 사용해도 됩니다
- [!] “Adjusting your PATH environment” 단계에서는 “Git from the command line and also from 3rd-party software” 옵션 선택 합니다.
- 설치가 완료되면 Windows 재시작 (권장)
-
설치 확인:
- Windows 명령 프롬프트(cmd) 실행
- 설치 후 재부팅 하지 않았다면, 프로그램 종료 후 다시 실행해주세요
- 다음 명령어 입력:
- Windows 명령 프롬프트(cmd) 실행
git --version
- 위와 같이 Git 버전이 표시되면 설치가 성공적으로 완료된 것입니다
동기화 방법 1. 시작 / 종료시 스크립트 실행하기
- 옵시디언 시작시, 종료시 각각 강제동기화를 하여 충돌을 최소화 하는 방법입니다.
시작시 동기화 스크립트
- 시작 시점 동기화를 위해 아래와 같은 스크립트를 텍스트 편집기로 작성하여, 배치파일로 저장합니다.
- start_sync.bat
@echo off
cd /d %~dp0
echo === Obsidian Git Sync Start ===
echo Pulling latest changes...
:: 현재 브랜치 확인
for /f "tokens=* USEBACKQ" %%F in (`git branch --show-current`) do set branch=%%F
echo Current branch: %branch%
:: 변경사항 임시 저장
git stash
:: 원격 저장소에서 변경사항 가져오기
git pull origin %branch%
:: 임시 저장한 변경사항 적용
git stash pop
:: 충돌이 있는지 확인
git diff --check
if %errorlevel% neq 0 (
echo WARNING: Conflicts detected! Please resolve manually.
pause
) else (
echo Sync completed successfully!
)
echo === Sync Complete ===
timeout /t 3
종료시 동기화 스크립트
- 종료시에도 동기화를 수행하면 혹시나 유실, 또는 충돌을 이중방지 할 수 있습니다.
- end_sync.bat
@echo off
cd /d %~dp0
echo === Obsidian Git Sync End ===
:: 현재 브랜치 확인
for /f "tokens=* USEBACKQ" %%F in (`git branch --show-current`) do set branch=%%F
echo Current branch: %branch%
:: 변경사항 확인
git status
:: 모든 변경사항 스테이징
git add .
:: 변경사항이 있다면 커밋
git diff --staged --quiet
if %errorlevel% neq 0 (
echo Committing changes...
git commit -m "Auto-sync: %date% %time%"
:: 원격 저장소에 푸시
git push origin %branch%
echo Changes pushed successfully!
) else (
echo No changes to commit.
)
echo === Sync Complete ===
timeout /t 3
동기화 방법 2. 시작 / 종료 통합 통기화 실행
- 이 방법은 1개의 배치파일에 시작 / 종료 동기화까지 모두 처리하는 방법입니다.
- 옵시디언 실행 바로가기를 사용하지 않고 이 배치파일의 바로가기로만 실행해주세요.
- 30초마다 옵시디언 실행상태를 체크하고, 종료시 동기화를 하게 됩니다.
- 옵시디언 실행이 된 후에 떠 있는 명령프롬프트창을 닫지 말아주세요. 닫으면 종료시 동기화가 안됩니다.
- 단점은 옵시디언이 켜져있는 동안 스크립트도 계속 실행되고 있으므로, 시스템 메모리를 소량 차지하게 됩니다.
@echo off
setlocal EnableDelayedExpansion
:: 옵시디언 설치 경로 (실제 경로로 수정 필요)
set OBSIDIAN_PATH="C:\Program Files\Obsidian\Obsidian.exe"
:: 옵시디언 볼트 경로 (스크립트 파일이 볼트 경로와 일치하지 않는 경우 수정 필요)
set VAULT_PATH="%~dp0"
echo === Obsidian Launcher with Git Sync ===
cd /d %VAULT_PATH%
:: Git 설치 확인
git --version > nul 2>&1
if %errorlevel% neq 0 (
echo Git is not installed! Please install Git first.
pause
exit /b 1
)
echo Starting Git sync...
:: 현재 브랜치 확인
for /f "tokens=* USEBACKQ" %%F in (`git branch --show-current`) do set branch=%%F
echo Current branch: %branch%
:: Fetch 먼저 실행하여 변경사항 확인
echo Fetching changes...
git fetch origin %branch%
:: 변경사항 확인
git diff --name-only HEAD..origin/%branch% > changes.txt
set /p CHANGES=<changes.txt
del changes.txt
if not "!CHANGES!"=="" (
echo Changes detected. Pulling changes...
:: 현재 변경사항 저장
git stash
:: 원격 변경사항 가져오기
git pull origin %branch%
:: 저장했던 변경사항 적용
git stash pop
:: 충돌 확인
git diff --check
if !errorlevel! neq 0 (
echo WARNING: Conflicts detected! Please resolve manually.
pause
)
) else (
echo No changes to pull.
)
echo Starting Obsidian...
start "" %OBSIDIAN_PATH% %VAULT_PATH%
:: Obsidian이 종료될 때까지 대기
echo Waiting for Obsidian to close...
:WAIT_LOOP
tasklist /FI "IMAGENAME eq Obsidian.exe" 2>NUL | find /I /N "Obsidian.exe">NUL
if "%ERRORLEVEL%"=="0" (
timeout /t 30 >nul
goto WAIT_LOOP
)
echo Obsidian closed. Starting final sync...
:: 변경사항 확인
git status
:: 변경사항이 있다면 커밋 및 푸시
git diff --exit-code --quiet
if %errorlevel% neq 0 (
:: 모든 변경사항 스테이징
git add .
:: 커밋
git commit -m "Auto-sync: %date% %time%"
:: 원격 저장소에 푸시
git push origin %branch%
echo Changes pushed successfully!
) else (
echo No changes to commit.
)
echo === All operations completed ===
timeout /t 3
exit