🉑

ForgejoとWSLのための.gitconfig

2025/03/07に公開

ホームサーバーに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でも実現するのが目標です。
GitHubによる認可

設定

WSLを使用している場合にGitHub以外のリポジトリに対してOauth2認可を使用するために、GCM(Git-Credential-Manager)を使用します。

このソフトをインストールして.giconfigファイルを正しく設定すると、gitの通常のコマンドが拡張されてgit pushのような動作に対して必要に応じてOauth2認可が行われます。認可の一連の処理はgitコマンドとGCMの間で行われるため、本質的にはVS Codeは不要です(あっても構いません)。

設定のステップは以下の通りです。

  1. Git for Windowsのインストール。
  2. .configでcredential.helperとしてGCMを指定する。
  3. .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内部で実行して~/.gitconfigcredential.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による認可プロセスが始まります。
Forgejoによる認可

その他

Linux DesktopにはGCMに似たソフトとしてgit-credential-oauth[https://github.com/hickford/git-credential-oauth]があります。
これに関しては公式リポジトリを含めてWSLで使えるかどうかの情報が無かったためGCMを使うことにしました。

Discussion