🌀

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コマンドを直接操作できる環境を整えることで解決しました。
https://github.com/Vinzent03/obsidian-git/issues/340#issuecomment-1435836523

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を操作できるようです。

参考リンク:

Qiita: AndroidでObsidianのGit操作をする方法

Discussion