崖っぷちの男

たぶん技術っぽいネタ。ブログ名が決められない

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 にも反映されます。
というか書き換えないでおくとみっともないので書き換えます。


何かもっと楽な方法がいろいろある気がするんですが…
ご存じの方教えてください。。

明日は後輩が入ってくるぞー!