TL;DR

Obsidian Git が正常に動かなかったが、git がユーザー名とパスワードを要求していたため動作しないことが判明した。

git config --global credential.helper osxkeychain によって認証情報を保存し、Obsidian Git が動くようにした。

何が起こっているか?

ObsidianをGitでバージョン管理 しようとしたら、

こういう表示が出てきて、Obsidian 上でプッシュもプルもできない。

理由は?

git - Fatal: could not read username for ‘https //github.com’ device not configured - Stack Overflow

You get that error (fatal: could not read Username for 'https://github.com': Device not configured) when git needs to ask for a username or password gitがユーザー名またはパスワードを要求する必要がある場合、そのエラーが発生します

This commonly happens in an environment where you are invoking git from some sort of gui tool and no appropriate credentials helper has been configured. これは通常、ある種のGUIツールからgitを呼び出しており、適切なクレデンシャルヘルパーが構成されていない環境で発生します。

つまり、Obsidian という「ある種のGUIツール」から Git を呼び出そうとしているが、認証されていないためエラーになっているということか。

解決策は?

色々あるらしい。

  • One of the easiest is to move to using ssh authentication rather than https.
    最も簡単な方法の1つは、httpsではなくssh認証の使用に移行することです。
  • You could hardcode the credentials for github into your local git repository, as described in the gitcredentials documentation.
    gitcredentialsのドキュメントで説明されているように、githubのクレデンシャルをローカルのgitリポジトリにハードコードすることができます。
  • You could configure an appropriate helper application. One may already be configured, but git may simply not be able to find it. The gitcredentials man page has information on this option as well.
    適切なヘルパーアプリケーションを構成できます。 1つはすでに構成されている場合がありますが、gitは単にそれを見つけることができない場合があります。 gitcredentialsのマニュアルページには、このオプションに関する情報もあります。

git パスワードを毎回聞かれる問題をHTTPSでも解決 - Qiita

GitHubの推奨はHTTPSです

そうらしいので、HTTPS で解決したいなあ。 HTTPS で解決するには、「credential.helper 」というものを使えばいいらしい。

解決策は? > credential.helper って何?

Git - 認証情報の保存 によると、HTTP プロトコルの場合は、接続のたびにユーザー名とパスワードが必要らしい。

Git には認証機能の仕組みがあり、それが「credential.helper」ということのよう。

  • デフォルト
    • 何もキャッシュされず、毎回ユーザー名とパスワードを聞かれる
  • cache モード
    • 15分だけ認証情報がメモリーに記録される
  • store モード
    • 認証情報が無期限で記録される
    • パスワードが平文でホームディレクトリに保存されるというデメリットがある
  • osxkeychain モード
    • Mac のみ利用可能。認証情報が暗号化された上で保存される。
  • wincred (補助ツール)
    • Windows のみ利用可能。osxkeychain と似た仕組みらしい。

解決策は? > 動作確認

テストとして、cache モードで挙動を試してみた。

git config --global credential.helper cache

これで一度ユーザー名とパスワードを入力したら、いけたみたいだ。

git config で見てみると、helper = cache となっていた

[user]
        name = kattsun44
        email = xxxxxxxx@gmail.com
        ︙
[credential]
        helper = cache

解決策は? > 動作確認 > osxkeychain

MacOS は 「osxkeychain」という仕組みを使えるそうなので、そちらにする

git config --global credential.helper osxkeychain

なんか2回出てくるんですが……?とりあえずパスワードを入力。「常に許可」を選択した。

これで Obsidian Git が動くかどうか…動いた!