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とする。
Pingback: gitで「SSL certificate problem: self signed certificate」と表示された時の対処法 | CodePlus