Initial release: Claude Code × Obsidian Wiki framework
This commit is contained in:
commit
f8d084eae4
23 changed files with 833 additions and 0 deletions
40
vault-template/scripts/git-pull-sync.sh
Executable file
40
vault-template/scripts/git-pull-sync.sh
Executable file
|
|
@ -0,0 +1,40 @@
|
|||
#!/bin/bash
|
||||
# git-pull-sync.sh — GitHub から最新を取得して iCloud に反映
|
||||
# launchd で毎時実行。Cloud Taskがpushした変更をローカルに取り込む。
|
||||
|
||||
set +e
|
||||
|
||||
VAULT_DIR="$HOME/vault"
|
||||
LOG_FILE="$VAULT_DIR/.sync.log"
|
||||
LOCKFILE="$VAULT_DIR/.git-sync.lock"
|
||||
|
||||
cd "$VAULT_DIR" || exit 0
|
||||
|
||||
# ロックファイルで同時実行を防止
|
||||
if [ -f "$LOCKFILE" ] && kill -0 "$(cat "$LOCKFILE" 2>/dev/null)" 2>/dev/null; then
|
||||
echo "[$(date '+%F %T')] git-pull: locked, skipping" >> "$LOG_FILE"; exit 0
|
||||
fi
|
||||
echo $$ > "$LOCKFILE"
|
||||
trap 'rm -f "$LOCKFILE"' EXIT
|
||||
|
||||
DIRTY=$(git status --porcelain 2>/dev/null | wc -l | tr -d ' ')
|
||||
if [ "$DIRTY" -gt "0" ]; then
|
||||
git stash 2>/dev/null
|
||||
if ! git pull --rebase origin main 2>/dev/null; then
|
||||
git rebase --abort 2>/dev/null
|
||||
echo "[$(date '+%F %T')] git-pull: rebase failed, aborted" >> "$LOG_FILE"
|
||||
fi
|
||||
if ! git stash pop 2>/dev/null; then
|
||||
echo "[$(date '+%F %T')] git-pull: stash pop FAILED — manual resolution needed" >> "$LOG_FILE"
|
||||
git checkout -- . 2>/dev/null
|
||||
git stash drop 2>/dev/null
|
||||
fi
|
||||
echo "[$(date '+%F %T')] git-pull: pulled with stash (dirty=$DIRTY)" >> "$LOG_FILE"
|
||||
else
|
||||
RESULT=$(git pull --rebase origin main 2>&1)
|
||||
if ! echo "$RESULT" | grep -q "Already up to date"; then
|
||||
echo "[$(date '+%F %T')] git-pull: $RESULT" >> "$LOG_FILE"
|
||||
fi
|
||||
fi
|
||||
|
||||
exit 0
|
||||
Loading…
Add table
Add a link
Reference in a new issue