Joelさんがsubversionを使うのはやめろ!と書いているのを見て、マジかよ!と思ったわけですが、gitの本を2冊買いながら全く手を出していなかった自分にはよい刺激になったんで、会社の開発サーバ(CentOS 5.4)にgitを入れてみた。joelさんはMercurial使ってるみたいだけどね…。
クライアントは、Mac miniです。
サーバの方は、例によってyumで。
yum -y install git
git用の適当なディレクトリを作り、公開リポジトリを作成する。
mkdir -p /var/git/hoge.git
cd /var/git/hoge.git
git init --bare
WebDavで公開するということなので、subversion用のconfをコピーして修正してみる。
cd /etc/httpd/conf.d
cp subversion.conf git.conf # subversion.confがない場合はgit.conf作って下さい
vi git.conf
git.confを修正する。また、.htpasswdは適宜作ってください。ここではあるものとします。
Alias /git-repos/hoge /var/git/hoge.git
<Location /git-repos/hoge>
DAV on
SSLRequireSSL
AuthType Basic
AuthName "Git Repository"
AuthUserFile /var/git/.htpasswd
Require valid-user
</Location>
Apacheを再起動させる。
service httpd restart
作成したgitリポジトリの権限を変更など。
cd /var/git
chown -R apache. hoge.git
cd hoge.git
git update-server-info
ここまでが、サーバの作業。
こっから、クライアント(Mac mini)の作業。
まず、httpsでアクセスするにはcurlを使うみたいなんだけれど、デフォルトの状態だとhttpsのアクセスができないらしいので、portsでサクッとアンインストールする。
その後、curlのインストールパラメータを編集してから、再インストール。
sudo port uninstall curl git-core
sudo port edit curl
# configure.argsのwithout-sslをwith-sslに変更
sudo port install curl
sudo port install git-core
ベーシック認証の認証情報をファイルに書いておく。
vi ~/.netrc
machine www.example.com # 適宜変更
login <ユーザー名>
password <パスワード>
開発サーバのSSL証明書はいわゆるオレオレ証明書なので、gitコマンドにエイリアスを設定しておく。
vi ~/.bashrc
alias git='GIT_SSL_NO_VERIFY=1 git'
これで、サーバに対してcloneでリポジトリを取得しようとしたのだが、エラーが発生した。
git clone https://www.example.com/git-repos/hoge
Initialized empty Git repository in /Users/******/hoge/.git/
error: SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed while accessing https://www.example.com/git-repos/hoge/info/refs?service=git-upload-pack
fatal: HTTP request failed
オレオレ証明書対策はしたと思うのだが、うまくいかなかった。
検索してみたら、.gitconfigのhttp.sslVerifyをfalseにしろって書いてあったのを見つけたのでやってみた。
git config --global http.sslVerify false
# 再びgit clone
git clone https://www.example.com/git-repos/hoge
# クローン成功
cd hoge
touch test.txt
git add test.txt
# コミット。gitなのでローカルのみ
git commit -m "test"
# サーバに変更を送りつける
git push origin master
# pushに成功したとして、再びcloneしてみる
cd ..
git clone https://www.example.com/git-repos/hoge hoge2
cd hoge2
# test.txtがあればOK
ls
コマンドラインだけでやったので、実用としてはまだ試してませんが、とりあえず通信自体は確認できたということでOKとする。