Web制作・開発会社 プレスマンのスタッフブログ

PRESSMAN*Tech

http上でgitをapacheユーザー以外で使いたい

gitを使うならssh経由のほうが速いし、設定も簡単ですが、例えば22番ポートが使えないとか、色々な理由でhttp経由で使用したい時もあります。そんな時に以下のような感じでgit-http-backendを使用してちょいちょいっと設定すれば使えるようになります。ちなみにこれ以下のapacheの設定は全ての環境で同じなわけではないのと、セキュリティについては考慮していません。実際はBasic認証をかけるなりしてください。また、Gitoliteは使わない設定です。

 

<VirtualHost xxx.xxx.xxx.xxx:443>
    DocumentRoot "/var/www/git"
    ServerName git.xxx.jp
    SetEnv GIT_PROJECT_ROOT /var/www/git
    SetEnv GIT_HTTP_EXPORT_ALL
    ScriptAlias /git/ /usr/libexec/git-core/git-http-backend/
<VirtualHost>

ただ、これだとapacheユーザーで動いてしまいます。http経由のみで使うならいいのですが、sshでも使用していたりすると違うユーザーで同じリポジトリを扱うことになってしまったりしてどうも具合がよくありません。
そこで、suexecを使用してgitユーザーとして動かせば色々と都合がいいのですが、少しだけやらないといけないことがあります。

<VirtualHost xxx.xxx.xxx.xxx:443>
    DocumentRoot "/var/www/git"
    ServerName git.xxx.jp
    SuexecUserGroup git git
    ScriptAlias /git/ /var/www/git/git-http-backend/
<VirtualHost>

として、/var/www/git/git-httpd-backendを以下のように作成して、所有者をgit、実行権限をつけてください。

#!/bin/bash
export GIT_PROJECT_ROOT=/var/www/git
export GIT_HTTP_EXPORT_ALL=true
/usr/libexec/git-core/git-http-backend

当然、リポジトリの所有者はgitユーザーにしてください。以上で設定終了です。
あと、TortoiseGitは便利だけど遅いですね・・・・。