code up

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

git with Apache httpd on Windows

先日立ち上げたgit-daemonはpush時に止まってしまう現象に遭遇し、MTUの問題だとかソフトウェアバグだとか、調べてもどうにもならなそうなのでhttpで公開する方法に変更。

とりあえず最低限の操作(add, commit, push, pull)がネットワーク経由で複数のユーザーができるところまで。

これまたちょっと手間取った。

環境はWindows XP3にApache/2.2.19がセットアップされている状態から。

まずはmsysGit

  • ダウンロード。今回はGit-1.8.3-preview20130601.exe
  • インストール。この時、Windows Explorer integrationの部分はSimple context menuのGit Bash Hereのみとした
  • Use Git Bash only(デフォルト)、Checkout as-is, commit as-is(デフォルトから変更)

ライブラリのコピー

C:\Program Files\Git\bin\libiconv-2.dllC:\Program Files\Git\libexec\git-coreにコピー。(今回はここがハマった。)

コマンドプロンプトからC:\Program Files\Git\libexec\git-core\git-http-backend.exeを起動してみて、fatal: No REQUEST_METHOD from serverなどと表示されれば正常に動いている。上記コピーを行わずにいるとlibiconv-2.dllがないというエラーが出るのだが、Apache経由で起動した場合、その情報が得られず発見に時間がかかった。

リポジトリの作成

  • D:\gitrepos\foo.gitというフォルダを作成
  • 上記フォルダで下記を実行
    git init --bare
    git config http.receivepack true
  • receivepackがないとpushに失敗する
  • init時に--sharedがないとダメとかgit update-server-infoを実行しないとダメというのを見かけたがWindows(msysGit)だからか無くても大丈夫だった。

Apacheの設定

次の設定を追加。認証やGitWeb用の設定などは必要に応じて追加していく予定なのでまずは最低限の設定のみ。

あまり他のサイトで書いてなかったので最近の仕様なのかもしれないが、GIT_HTTP_EXPORT_ALLの後ろに1を加えないとクライアント側でcloneできなかった。

SetEnv GIT_PROJECT_ROOT D:/gitrepos
SetEnv GIT_HTTP_EXPORT_ALL 1

ScriptAlias /git/ "C:/Program Files/git/libexec/git-core/git-http-backend.exe/"

<Directory "C:/Program Files/git/libexec/git-core">
	Options +ExecCGI
	Allow from all
</Directory>

httpdを再起動。

クライアント側

msysGitを上と同じようにインストールした後、個人情報の登録。

git config --global user.email "foo@bar.baz"
git config --global user.name "Foo Bar"

簡単なテスト。

git clone http://bar/git/foo.git
cd foo
touch a
git add .
git commit -m "1st commit"
git push origin master
# 他の端末でファイルを追加した後
git pull

他の端末、ユーザーでも同じ操作ができれば完了。

関連記事
タグ:git Windows httpd Apache
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。