Windowsで一人 Git で gitweb
バージョン管理システム、といえば今までだと Subversion を使ってたんですが、
巷で流行っている Git を使ってみたかったので、
最近までやっていた案件の中で個人的に使ってみました。
その時にやってみたことをまとめておきます。
個人的に、ということでローカル環境で一人で使いました。
OS は Windows XP です。
まず Git 自体ですが、普通に msysgit ( 2011/03/31時点の最新 1.7.4 )だと
ファイル名に「表」とかが入ってるやつが
コミットできないので以下を使うのが無難そうです。
UTF-8ファイル名対応版 Git for Windows ( 2011/03/31時点の最新 1.7.0.2 )
あとは TortoiseGit を入れれば OK です。
tortoisegit - Porting TortoiseSVN to TortoiseGit - Google Project Hosting
でここまでは良かったんですが、Subversion を使うときは Trac も使ってたので、
それっぽいやつがないかなーと探していたら、Git に標準で gitweb という Perl/CGI が
ついてくることを知りました。
この設定で色々手こずったのですが、とりあえずこうしたら動いた、というのをまとめておきます。
Git のパスはデフォルトなので、変えている人は適宜読み替えてください。
utf8_heavy.pl
なぜかこれが無い、って言われちゃうので適当に下から拾ってきて
404 Not Found
ここに入れました(ソースコードを「utf8_heavy.pl」という名前で保存)。
C:\Program Files\Git\lib\perl5\site_perl\5.8.8
pm いろいろ
他にも下のファイルが無い、って文句を言われるので
unicore/Exact.pl unicore/PVA.pl unicore/Canonical.pl CGI CGI.pm
別にインストールしてた ActivePerl 5.8.8 からとってきて、またしてもここに入れました。
C:\Program Files\Git\lib\perl5\site_perl\5.8.8
bash.exe: warning: could not find /tmp, please create!
とか言われるので以下に "tmp" というフォルダを作っときました。
C:\Program Files\Git
gitweb.cgi の設定
CGI 自体はここにあります。これを編集していきます。
C:/Program Files/Git/share/gitweb/gitweb.cgi
1行目はとりあえずこれで。
#!C:/Program Files/Git/bin/perl
71行目あたりはこれで。
our $GIT = "C:/Program Files/Git/bin/git";
75行目あたりにローカルのリポジトリのパスを入れる。
「C:\hoge\foo\bar\」と違うことに注意。
our $projectroot = "/c/hoge/foo/bar/";
gitweb.cgi で日本語 (Shift_JIS) の文字化け回避
to_utf8 という関数があるのですが、ここを以下のようにすると
日本語が文字化けしなくなるはずです。
Perl は長らく書いてないので正直適当です。
sub to_utf8 { my $str = shift; return undef unless defined $str; my $enc = guess_encoding($str, qw/shiftjis/); if (ref $enc && $enc->name eq "shiftjis") { utf8::decode($str); return decode('shiftjis', $str, Encode::FB_DEFAULT); } if (utf8::valid($str)) { utf8::decode($str); return $str; } else { return decode($fallback_encoding, $str, Encode::FB_DEFAULT); } }
※そういば use Encode::Guess; を最初の方に追加しなきゃいけなかったかも
スナップショットは ZIP でね
gitweb.cgi の300行目くらいです。
スナップショットをとろうとしたときに、デフォルトだと tar.gz で落とそうとして失敗するので
"default" を "zip" にしておきます。
'snapshot' => { 'sub' => \&feature_snapshot, 'override' => 0, 'default' => ['zip']},
やっと… httpd.conf
httpd.confに以下を追加しておしまいです。
Alias /gitweb "C:/Program Files/Git/share/gitweb" <Directory "C:/Program Files/Git/share/gitweb"> AddHandler cgi-script .cgi <Files ~ "\.cgi$"> Options +ExecCGI </Files> AllowOverride None Order allow,deny Allow from all DirectoryIndex gitweb.cgi </Directory>
Apache を再起動したら、以下の URL でアクセスできるはずです。
http://127.0.0.1/gitweb
オマケに description
Git リポジトリの中に 「.git」フォルダがありますが、
この中の description ファイルを書き換えておくと
gitweb にも反映されます。
というか書き換えないでおくとみっともないので書き換えます。
何かもっと楽な方法がいろいろある気がするんですが…
ご存じの方教えてください。。
明日は後輩が入ってくるぞー!