gitでhttp-backendをつかってpush
結構はまったので、めも。
ubuntu 10.04
apache2, git, gitwebをapt経由でインストール済み。
目的: http://
プロジェクトの位置は /var/www/repos/test.git
まず、/etc/apache2/conf.d/git.confに設定情報を記述
SetEnv GIT_PROJECT_ROOT /var/www/repos SetEnv GIT_HTTP_EXPORT_ALL ScriptAlias /repos/ /usr/lib/git-core/git-http-backend/ <LocationMatch "^/repos/.*"> AuthType Basic AuthName "Git Access" Require valid-user AuthUserFile /etc/apache2/passwd.git </LocationMatch>
で、/etc/apache2/passwd.gitを作成。
htpasswd -c /etc/apache2/passwd.git
ついでに、gitwebも/etc/apache2/gitwebに設定。
こっちは http://
Alias /gitweb /usr/share/gitweb <Directory /usr/share/gitweb> Options FollowSymLinks +ExecCGI AddHandler cgi-script .cgi </Directory>
プロジェクトの位置をgitwebに教える
/etc/gitweb.conf
$projectroot = "/var/www/repos" ...
apache2をrestart
/etc/init.d/apache2 restart
以上で設定完了。
gitserverにレポジトリ作成.
cd /var/www/repos mkdir test.git cd test.git git init --bare --shared=true
クライアント側でcloneとpushしてみる。
git clone http://<gitserver>/repos/test.git cd test touch README git add . git commit -m "first" git remote -v # 確認 git push origin master
できた。
何度もpasswordを聞かれるのがうるさいので、 ~/.netrcにパスワードを記述。
machine <gitserver> login <htpasswdのuser> passwd <htpasswdのpassword>
特にはまったところは、gitのapacheの設定で、LocationMatchを "^/repos/.*/git-receive-pack$"としていた際に、git cloneができても、その後のgit pushが次のようなエラーが出て失敗したこと。
error: Cannot access URL http://<gitserver>/repos/test.git/, return code 22 fatal: git-http-push failed
git-receive-packだけを対象とせず "^/repos/.*"としたらうまく行った。