--
--

スポンサーサイト

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

Tag:

17
2011

Git/Mercurialを試してみた

CATEGORY開発環境
Subversionですら使い始めてまだほんの2,3年というところだが、とっくの昔に時代は分散型バージョン管理システムだよ、って空気を感じたので、ちょっと乗換えを試みてみた。

Git

いろいろと種類があるようだったので、この辺を参考にまずはLinuxの開発でも使われていて知名度が高く、一番利用者も多そうな Git を試してみる。

・・・なるほど使いやすい。でも自宅のサーバー構成だと今置く場所がないw

Eclipseプラグインの EGit (+JGit?) をクライアントにして使ってみたが、その辺のプロジェクトを選んで即バージョン管理の対象にすることができたり、簡単に始めることが出来る。
コメントの日本語も、Eclipseから使う分には問題ない(ファイル名は未確認)。
中央リポジトリも、コマンドを調べつつ、作って連携させることが出来そう。

が、我が家では一点問題が。Subversion動かしてるWebサーバーに中央リポジトリを作ろうとしたが、Apache経由で動かすのがうまくいかない。
いや、Gitの場合、特にCGIとかの設定はなく、極端な話WebDAVのディレクトリがあるのでそこに置けばいいよーとか書いてあるのだが、EGitが対応してないっぽい。
httpの場合はSmart HTTPでないと駄目?というようなエラーが表示される。
サーバー側にこれを設定してやればいいのかなぁとは思ったが、そもそもそんな使い方してる人はあんま居ないようで、いまいち情報も少ない。

なんとなく、Subversion的発想でWebサーバーに中央リポジトリを作ろう、という考えをしたのが間違っていた気がする。
Gitを使うなら、NAS辺りにファイルを置いてそれを中央リポジトリにする、とかSSHやVPNでたまに繋いでpushやpullする、って使い方が良さそう。
頻繁に繋がなくていいんだし、Webサーバーなんぞ用意する必要はない、と。

ただ、今手元には中央リポジトリを置けそうなのはこのWebサーバーしかないw
Sambaでも入れて共有すればいいんだろうけど、そこまでするなら当面Subversionでいいや・・・という結論に達したので、Gitは却下した。

Mercurial

念のため他のも調べるかーと見てみたところ、Mercurial日本で結構使われてるっぽかったので、こっちも試してみることにした。

基本的にはGitと同じ発想ではあるっぽいものの、標準でCGIが用意されていたりとApacheで使うことも想定されているようで、無事にWebサーバーに中央リポジトリを立てることができました(^^

インストールしたのは下記。
Mercurial のx86とx64両方を入れたのは、Mercurial Eclipseからコールする必要があり、x86版じゃないとうまく動かなかったから。
逆に TortoiseHg はシェルと連携するのでx64版じゃないとインストールできない。
また、TortoiseHg を入れたのは Mercurial Eclipse にはリポジトリエクスプローラ的な機能がないようで、中央リポジトリの状態を一々cloneしないと確認できず、微妙に不便だったから。
(結局 TortoiseHg でも出来ないっぽいのだけれど。)

中央リポジトリは普通にinitコマンドで作成。Gitのように特に --bare みたいな指定はいらない模様。

Apache周りの設定はこの辺を参考にしつつ実施。
まず /usr/share/doc/mercurial/examples/hgweb.cgi を /var/www/hg/ とか適当な公開用のサブディレクトリにコピー。
別途 hgweb.config というファイルを作成し、下記のように公開するリポジトリをリストアップする。
[paths]
foorepo = /var/local/hg/foo
barrepo = /var/local/hg/bar
リポジトリ名 = パス、の書式。.hgは付けなくてよい。
さっきの hgweb.cgi を開いて、config に上記ファイルのパスを指定する。
(リポジトリ一個だけの場合は不要で、直接パスを書けばいいらしい。)

次に httpd.conf (debianだとsites-availableの下のHostごとのファイル)に、上のCGIを呼び出すための設定と、初期状態では外から丸見えのため、今回はアクセス制限としてベーシック認証を設定。
ScriptAliasMatch ^/hg(.*) /var/www/hg/hgweb.cgi$1
<Directory /var/www/hg>
Options ExecCGI FollowSymLinks
AllowOverride None

AuthType Basic
AuthName "Private"
AuthUserFile /var/www/.htpasswd
Require valid-user
Order deny,allow
deny from all
</Directory>
これで、http://~/hg/ でリポジトリの一覧が表示されるようになり、http://~/hg/foorepo とかで個別のリポジトリが参照できるようになる。

リポジトリ一覧の「Description」「Contact」の内容、またpushのアクセス制限を行う場合、各リポジトリに下記のような .hg/hgrc ファイルを作成して設定する。
[web]
description = foo repository
contact = honeplus
allow_push = honeplus
allow_push はベーシック認証等のアカウントと紐づくので、pushについてはApache側よりこちらで制限した方が楽そう。
その他、拒否設定の deny_push や、SSL経由でなくともpush出来るようにするかの push_ssl といった設定があるようだ。
(うちの環境ではSSL経由だし、いずれも未使用。)
なお、IPアドレスでのベーシック認証回避とallow_pushを同時に設定したところ、クライアント側からpushできなくなったので注意。
Subversionでは書き込みだけ要認証とかできたが、それはここでは出来ない模様。

ここまでで中央リポジトリの準備は完了。

次にWindows側。基本的には何もせずともスムーズに行ったが、二点だけ設定を行った。

一つ目は、オレオレSSL証明書の登録。
自宅のサーバーは自前のSSL証明書で動いているので、そのままでは不正な証明書としてエラーになってしまう。
対策として、Mercurialのインストールフォルダ(TortoiseHgだとその下のhgrc.dフォルダ)にある、cacert.pemに証明書を追記した。

二つ目は、文字コードの設定
コメントの文字コードがどういう扱いなのかいまいちわからなかったが、とりあえず念には念を入れて環境変数に HGENCODING=UTF-8 と登録しておいた。

これで、特に問題なくclone→編集→コミット→pushの流れが実現できることを確認。

後は、Redmine からリポジトリが参照できるかをテスト。
http://~/hg/foorepo では駄目だったが、/var/local/hg/foo では見えることを確認。
(これはGitも同様。)
UTF-8にしたのが功を奏したのか、特にコメントも文字化けせず参照できました。

というわけで、Mercurial については当面使う上で問題無しと言うことで、とりあえずこのまま使っていくことに決定した!

・・・ただし、下記の点については未解決。当面はSubversionと並行稼動だなぁ。
  • ファイル名の日本語は駄目(Windows→Linuxとかだと駄目らしい。今のところ使ってないし未確認。)
  • hgweb.cgiのコメントが文字化けする。

その他

このブログ書いてるときに Bazaar の詳しい記事に気づいたw
ここまで解説があるなら、Bazaarは日本語的な問題がないらしいし、こっちにしても良かったかもしれんね。


2011/5/18追記。
せっかくだからBazaarも試してみた。何か日本語OKとか言うくせに、Eclipseから日本語のコメント入れてコミットしたら
'utf8' codec can't decode byte 0x8e in position 9: invalid start byte
とか言われるんだけど・・・orz

後、Mercurialのファイル名日本語も試してみた。
というか、Eclipseからはそもそもファイル名に日本語を含むファイルがコミットできなかった。
(対象とみなされない。)
TortoiseHgでは文字化けしてて出来ない。うーん。

長々と調べたけど、現状だとSubversionからの完全移行はできなそうな雰囲気。
git+svnって使い方してる人が多いみたいだし、ちゃんと管理する中央リポジトリとしてはSubversionを使って、手元でちょっと作業始めるときはgitとか、そんな使い方がベストなのかもしれない。
それなら別にうちの環境でも問題ないし。

解決策はあるのかもしれないけど、何かCVSで文字化けと戦ってた時代に戻った気分で悲しい(TT
ちょっとがっかりorz
スポンサーサイト

Tag: Mercurial Git Redmine Eclipse Apache

0 Comments

Leave a comment

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