TL;DR
Obsidian Git が正常に動かなかったが、git がユーザー名とパスワードを要求していたため動作しないことが判明した。
git config --global credential.helper osxkeychain
によって認証情報を保存し、Obsidian Git が動くようにした。
何が起こっているか?
ObsidianをGitでバージョン管理 しようとしたら、
こういう表示が出てきて、Obsidian 上でプッシュもプルもできない。
理由は?
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 thanhttps
.
最も簡単な方法の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
と似た仕組みらしい。
- Windows のみ利用可能。
解決策は? > 動作確認
テストとして、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 が動くかどうか…動いた!