obsidian

obsidian-gitはiOSやandroid版Obsidianアプリにも対応はしているものの、Isomorphic GitというJSで実装されたGitを使用しているので制限がある。

  1. マージコンフリクトの解決ができない(リベースで解決が無理)
  2. SSHに対応してない
  3. サブモジュール非対応
  4. あまりでかいリポジトリだとクラッシュする(メモリサイズの制限)
  5. 遅い

そのためググるとFDroid+termuxでネイティブGit使う環境構築してる例がたくさん出てくるけど、どうやら極論なくてもどうにかなるらしい。実際なった。

Obsidian + Android + Syncing via GitHub in 2023 : r/ObsidianMD

原理上はiOSアプリの方でもできるはずだが、試してない。

下準備

.gitignoreの設定

携帯アプリだと.obsidian/workspace-mobile.jsonというのが作成されるので、.gitignoreに追加しておく。

ファイル名に使用できない文字列がないか確認

AndroidというかLinuxの問題だと思うが、Macだとファイル名に使用できてもAndroidでは不正な文字のファイルが混ざってるとクローンできなくなるので、事前に確認。半角ダブルクオート、半角カンマ、半角!?あたりがだめっぽかった。QuartzなどでWeb公開するタイトルを変えたくない場合はフロントマッター(Obsidianのプロパティ)でtitle要素を指定しておく。

リポジトリへのアクセストークンを作る

sshでプッシュに対応してないので、httpsでのアクセストークンを作る必要がある。obsidian-gitの設定欄にGithubのアカウント名を入れる項目があるのでGithubしか対応してないと思い込んでいたのでしばらく諦めていたが、別にGiteaでもできることがわかった。

Githubの場合はここを参考にする。

トークンは一度表示されたのをメモっておかないと2度と表示出来ないので注意。

リポジトリをAndroidデバイスに転送する

Android File TransferもしくはOpenMTP.git.gitignore.obsidianなど全てのファイルを含むVaultを丸ごと転送する。

Android File Transferがデバイスを認識しない場合は

  • USBのモードがMTP転送になっていることを確認
  • USBデバイスを奪うあらゆるアプリを落としておく
    • Dropbox
    • GoogleDrive
    • プレビュー.app(自分はこれだった)
    • Finderの再起動も試すこと

※ただ、自分の場合はなぜかファイルが全部転送しきれず止まってしまったので、結局termux上でcloneすることになってしまった…。どうも、AFTがフォルダ丸ごと転送すると途中で止まるけど、個別のファイルをD&Dで送ろうとすると隠しファイルが実際には送れていない、みたいなことがあったりして、よくわからない。

空のvaultでObsidian Gitを使ってクローンするのではダメなのか?という話なのだが、多分Isomorphic Gitがめちゃ遅い問題があるのでやってないのだと思う。

AndroidアプリでVaultを開く

AndroidアプリでObsidianを開き、転送したVaultのフォルダを開く。きちんと転送されてれば開いた時点でObsidian Gitのメッセージがなんやかんや流れるはず。

コミットAuthorの指定

Vaultの設定→obsidian-gitの設定からCommit AuthorとCommit Author Emailを設定する。コミット出来ないので注意する。

リポジトリのリモートURLをhttpsにする

PC上ではリモートリポジトリがSSHになっている場合、先に作っておいたアクセストークンを使用する。

コマンドパレットからGit:edit remote urlを選択し、ブランチを選択(だいたいorigin)。 URLはhttps:://<生成したトークン>:github.com/<ユーザー名>/<repository>.gitに設定する。(giteaの場合はgiteaのURLに変える)

PC上で元々HTTPSをトークン認証してPushも行っている場合リポジトリコピーの時点でこのURLになってるはずなので設定は不要

運用

アプリ開いたらコマンドパレットからGit: Pull、閉じる前にGit:Create Backupを実行するだけ。

このメモはサブモジュールとしてプライベートリポジトリを登録しているが、そっちはIsomorphic Gitがサブモジュール対応してないので諦める。必要があればtermux側で同期するしかない。