Obsidian Git:スマホの自動Pushで履歴が壊れた話とその復旧方法
ObsidianでGitHubとノートを同期している方へ。
本記事では、複数端末でコンフリクトが発生したときの解消法について、記述します。
スマホの自動PushによってPCでのメモ内容が失われる事故が発生しました。
その際に行った、スマホからGitコマンドを直接叩いて復旧する手順を紹介します。
前提:Obsidian + GitHub でノートを同期する運用
私の環境では、ObsidianのノートをGitHubのプライベートリポジトリで管理しています。利用している端末は以下の通りです。
-
PC(Windows)
-
スマホ(iOS)
-
タブレット(iOS)
各端末にObsidian Gitプラグインを導入し、Push/Pullを自動化しています。
スマホの自動Pushが履歴を破壊
ある日、PCでメモを編集し、コミット&Pushを完了。
その後、スマホでObsidianを起動した瞬間、事件が発生しました。
スマホ版が自動でPull → Pushを実行し、古い状態のノートを最新としてGitHubに上書きしてしまったのです。
その結果、PCでの編集内容がすべて失われた状態になりました。
私は、PC側で問題のコミットを drop
し、--force
オプションでPush。
しかしこれにより、スマホとPCでコミット履歴が分岐し、スマホからのPullが abort
する状態になってしまいました。
Obsidian Gitは非常に便利なプラグインですが、マージ処理や複雑な履歴の管理機能は持っていません。
そのため、トラブルが発生した際にできることは限られてしまいます。
スマホからGitコマンドを直接実行
スマホからGitコマンドを直接操作できる環境を整えることで解決しました。
iSHでAlpine Linux環境を構築
iSHは、iOS上にAlpine Linuxベースのシェル環境を提供するアプリです。
これを使えば、スマホ上でGitコマンドを扱えるようになります。
以下は、iSHでのセットアップ手順です。
# Gitのインストール
apk add git
# マウント先ディレクトリ作成
mkdir -p /mnt/obsidian
# iOSのObsidianフォルダをマウント
mount -t ios null /mnt/obsidian
マウントが完了したら、該当ディレクトリに移動してGitを操作します。
cd /mnt/obsidian
git reset --hard origin/main
このコマンドにより、スマホのローカル状態をリモート(GitHub)の状態に強制的に合わせ直し、Pullのエラーを解消することができました。
Androidの場合
Androidの場合は、Termux や他のシェルアプリを使うことで、同様にGitを操作できるようです。
参考リンク:
Discussion