ForgejoとWSLのための.gitconfig
ホームサーバーにForgejoを導入しました。
WSLのgitからpushする際、パスワードやトークンを使わずにForgejoサーバーによるOAuth2認可を受けるための.gitconfig設定方法を調べたので、ここに書き記しておきます。
- Windows 11 (24H2)
- WSL (Ubuntu 24.04)
- Git for Windows (v2.48.1.windows.1)
やりたいこと
GitHubを使ってプログラム開発をする場合、私はVS CodeとWSLを組み合わせて開発を行っています。
このGitHub, VS Code, WSLの組み合わせは非常に強力で、特に設定ファイルを書かなくともgit push
などのコマンドに対してブラウザによるOAuth2認可が行われます。
これと同じユーザー体験をForgejoでも実現するのが目標です。
設定
WSLを使用している場合にGitHub以外のリポジトリに対してOauth2認可を使用するために、GCM(Git-Credential-Manager)を使用します。
このソフトをインストールして.giconfig
ファイルを正しく設定すると、gitの通常のコマンドが拡張されてgit push
のような動作に対して必要に応じてOauth2認可が行われます。認可の一連の処理はgitコマンドとGCMの間で行われるため、本質的にはVS Codeは不要です(あっても構いません)。
設定のステップは以下の通りです。
- Git for Windowsのインストール。
- .configでcredential.helperとしてGCMを指定する。
- .configにForgejoサイト固有の設定を追加する。
Git for Windowsのインストール
GCMのWSLに関するドキュメントに従い、Git for Windowsの最新版をダウンロードしてWindowsにインストールします。この中にGCMが含まれています。
Git for WindowsをインストールせずにGCMだけインストールする方法もありますが、
- ドキュメントはGit for Windowsを推奨している。
- GCMだけのインストールだと追加の設定が必要になる。
といった理由により、おとなしくGit for Windowsをインストールしました。
.gitconfigでcredential.helperとしてGCMを指定する
上記ドキュメントのConfiguring WSL with Git for Windowsに従い、以下のコマンドをWSL内部で実行して~/.gitconfig
にcredential.helper
としてGCMの実行ファイルのパスを設定します。
GCMの実行ファイルのインストール位置は、インストール方法によって変わります。ここに書いてある位置は、Git for Windows v2.48.1のexe版(Git-2.48.1-64-bit.exe)をダウンロードしてインストールしたものです。
git config --global credential.helper "/mnt/c/Program\ Files/Git/mingw64/bin/git-credential-manager.exe"
.configにForgejoサイト固有の設定を追加する
ForgejoサーバーのURLをhttps://foo.example.com/ と仮定します。
GCMドキュメントのGeneric Host Provider OAuthと、ForgejoのOAuth2-providerドキュメントのGit Authenticationを参考にして、以下のコマンドを実行して~/.gitconfigにサーバー用のコンフィギュレーションを追加してください。
git config --global credential.foo.example.com.oauthClientId e90ee53c-94e2-48ac-9358-a874fb9e0662
git config --global credential.foo.example.com.oauthAuthorizeEndpoint /login/oauth/authorize
git config --global credential.foo.example.com.oauthTokenEndpoint /login/oauth/access_token
oauthClientIDは、ForgejoにハードコードされているGCM用のIDです。
このIDは全てのForgejoサーバー・インスタンスに共通です。
このIDの出所を見たい場合は、Forgejoにアドミニストレータ―としてログインして、/admin/applications
を参照してください。
GUIの操作手順としては右上のユーザー・アイコン(Profiles and Settings...)からSite Administration
-> Integration
-> Applications
です。
以上のコマンドを実行すると、~/.gitconfig には以下の内容が追加されます。
[credential]
helper = /mnt/c/Program\\ Files/Git/mingw64/bin/git-credential-manager.exe
[credential "foo.example.com"]
oauthClientId = e90ee53c-94e2-48ac-9358-a874fb9e0662
oauthAuthorizeEndpoint = "/login/oauth/authorize"
oauthTokenEndpoint = "/login/oauth/access_token"
設定が済んだらgit push
コマンドを実行してください。WEBブラウザ上でOauth2による認可プロセスが始まります。
その他
Linux DesktopにはGCMに似たソフトとしてgit-credential-oauth
[https://github.com/hickford/git-credential-oauth]があります。
これに関しては公式リポジトリを含めてWSLで使えるかどうかの情報が無かったためGCMを使うことにしました。
Discussion