git-http-backend による git + apache httpd 連携 - end0tknr's kipple - web写経開発
先日の上記entryに対し、今回はwindows版です。 尚、git for win のversionは、2.42.0
DOS> where git C:\Program Files\Git\cmd\git.exe DOS> git --version git version 2.42.0.windows.2
step1 - 共有gitベアリポジトリ作成
管理者としてコマンドプロンプトを起動し、以下。
DOS> mkdir C:\inetpub\wwwroot\git\git\test5.git
DOS> cd C:\inetpub\wwwroot\git\git\test5.git
DOS> git init --bare --share --initial-branch=main
DOS> tree /F
C:.
│ config
│ description
│ HEAD
├─hooks
│ applypatch-msg.sample
│ commit-msg.sample
│ fsmonitor-watchman.sample
│ post-update.sample
│ pre-applypatch.sample
│ pre-commit.sample
│ pre-merge-commit.sample
│ pre-push.sample
│ pre-rebase.sample
│ pre-receive.sample
│ prepare-commit-msg.sample
│ push-to-checkout.sample
│ sendemail-validate.sample
│ update.sample
├─info
│ exclude
├─objects
│ ├─info
│ └─pack
└─refs
├─heads
└─tags
※ 当初、リモートリポジトリのpathは C:\inetpub\wwwroot\git\test5.git としていましたが、 IISまたはgit-http-backend.exeがここを見つけられなかった為、 C:\inetpub\wwwroot\git\git\test5.git のように 「git」を2コ並べています。
old) C:\inetpub\wwwroot\git\test5.git new) C:\inetpub\wwwroot\git\git\test5.git
step2 c:/inetpub/wwwroot/git/git/test5.git/config の編集
以下の「receivepack = true」がないと、 git push origin main 時に Service not enabled: ‘receive-pack’403 エラーとなります
[http] receivepack = true
step3 - local リポジトリ作成 から初回push
管理者としてコマンドプロンプトを起動し、以下
DOS> mkdir C:\tmp\test5.git DOS> cd C:\tmp\test5.git DOS> git init DOS> echo "Initial commit" > README.TXT DOS> git add README.TXT DOS> git commit -m "Initial commit" DOS> git remote add origin C:\inetpub\wwwroot\git\git\test5.git DOS> git branch -M main DOS> git push origin main
通常コマンドプロンプトを起動し、localからgit cloneできることを確認
DOS> cd C:\Users\end0t\tmp
DOS> git clone C:\inetpub\wwwroot\git\git\test5.git
Cloning into 'test5'...
done.
DOS> cd test5
DOS> tree /F
C:.
README.TXT
step4 IISのハンドラーマッピングに git-http-backend.exe を登録

更に c:/inetpub/wwwroot/web.config を追加
<configuration>
<system.webServer>
<handlers>
<add name="GitBackend" path="git/*" verb="*" modules="CgiModule"
scriptProcessor="C:\Program Files\Git\mingw64\libexec\git-core\git-http-backend.exe"
resourceType="Unspecified" requireAccess="None" />
</handlers>
</system.webServer>
</configuration>
システム環境変数の追加
| 変数 | 値 |
|---|---|
| GIT_PROJECT_ROOT | C:\inetpub\wwwroot\git |
| GIT_HTTP_EXPORT_ALL | 1 |
更に C:\Windows\System32\inetsrv\config\applicationHost.config を 編集することで、上記の環境変数がIISに反映されるようです。
old) <section name="handlers" overrideModeDefault="Deny" /> new) <section name="handlers" overrideModeDefault="Allow" /> old) <processModel identityType="ApplicationPoolIdentity" old) loadUserProfile="true" setProfileEnvironment="false" /> new) <processModel identityType="ApplicationPoolIdentity" new) loadUserProfile="true" setProfileEnvironment="true" />
step4 - http での git cloneや pushのテスト
DOS> git clone http://localhost/git/test5.git DOS> cd test5 DOS> echo "Modified commit" >> README.TXT DOS> git add README.TXT DOS> git commit -m "Modified commit" DOS> git push origin main Enumerating objects: 5, done. Counting objects: 100% (5/5), done. Writing objects: 100% (3/3), 269 bytes | 269.00 KiB/s, done. Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 To http://localhost/git/test5.git 96e3f43..29284ab main -> main