2009年10月15日
Debianのwebwml CVSをgitで処理する (翻訳作業者編)
Debian.orgのWebサイトのコンテンツ「webwml」の管理は、いろいろなしがらみから未だにCVSを採用している。Subversionなどの別のSCMにしようという提案は何度か行われてはいるものの、作業には管理チームの手助けが必要なほかに、各翻訳作業者(世界各国各言語)がそのSCMになじめるかという問題があり、なかなか実行には踏み切れていないというのが現状だ。
しかし、翻訳やコミットをしている立場からすると、CVSはつくづく扱いづらい。何をするにもサーバに問い合わせるから遅く、コミッタ権限を持っていないとパッチなりファイルなりを送り付ける以外何もできない。コミッタ側もそのパッチ処理がだるいので億劫になる。
ということで、CVSと同期したGitリポジトリを作って翻訳作業者に公開し、コミットされたものをCVSに半自動でコミッタ(私)が順次処理できるような仕組みを作ってみた。Gitは分散環境に適したSCMで、リポジトリへの書き込み権限を持たない作業者でもローカルなコンテンツ管理を行える(たとえばネットワークから切断された環境でも履歴やコミットを利用できる)。
翻訳作業者がDebian JP Projectのメンバなら(sshで入ることのできるアカウントを持っているなら)、次の書式でツリーをクローンできる(gitスイートはgit-coreパッケージに入っている)。
$ git clone ユーザ名@git.debian.or.jp:/git/webwml.git
englishとjapaneseを格納したwebwmlディレクトリができるので、このjapaneseのほうで作業していけばよいわけだ。翻訳では先頭行の#use wml::debian::translation-checkの値を英語版のCVSリビジョンに合わせる必要があるが、これはenglish下の同名ファイルの最終行に書かれているはず。たとえば翻訳追従系の作業なら、1つのファイルの作業が終わるたびに、
$ git add ファイル名パス $ git commit -m "sync with 原文リビジョン"
を繰り返していく。変更内容を読み返したいなら、「git diff」や「git log」などを使う。詳細については参考文献を参照いただきたい。 ひととおり作業に区切りができたらこれをgit.debian.or.jpにプッシュする。
$ git push
これで、これまでに行ったコミットがgit.debian.or.jpに送られ、Debian JP Projectのdebian-wwwメーリングリストにコミットログが流れて、後はCVSコミッタの処理待ちとなる。本当はレビューのプロセスも入れたいところだけど(たとえばドラフト用のブランチ切って、レビューアがレビューしてmasterへマージ、とするとか)、今のところはアジャイルに即コミット、間違いがあれば後で更新という形で進めている。 逆に作業ツリーの中身をgit.debian.or.jpのものと同期するには、次のようにpullすればいい。
$ git pull
Debian JP Projectメンバでない場合、つまり直接クローンやコミットをできない場合は、Web経由でクローンし(プッシュはできない)、パッチを適宜debian-wwwメーリングリストに送付いただくことになる。Web経由でのクローンの書式は次のとおり。webwml-gitという作業ツリーができる。
$ git clone http://git.debian.or.jp/git/webwml-git.git
プッシュができないだけで、作業ツリーの編集やコミットは自由にできる。同期は先と同様に「git pull」。 行った変更からパッチを生成するには、git format-patch(またはgit-emailパッケージのgit send-email)を使う。git format-patchを次のように実行すると、git.debian.or.jpのほうにまだマージされていない部分についてのパッチファイル(*.patch)がコミットごとに用意されるので、このパッチファイル群を添付などで送ればいい。メール本文の中に入れるとエンコーディングが変わるなどしてコミッタ側で扱いづらいので、添付ファイルのほうが望ましい。
$ git format-patch origin
なお、debian-wwwメーリングリストはsubscribeしているメールアドレスでないと投稿はできないようになっているので注意されたい。
ここまでの内容で、翻訳作業者はひととおりのことができるようになるはず。 翻訳作成・更新待ちのものについては、Debian.org Web Japanese translation statusなども参照するとよいだろう。
Git初心者にお勧めできる入門書。Gitのエッセンスはすべてここに込められている。
奇しくも同名になってしまったものの、こちらはGit開発者濱野氏ご自身による1冊。『入門git』では省略している内部構造や各種のコマンド、フックについても詳細に解説している。『入門Git』を『入門git』と並べて持っておきたい。
![[hatena]](http://d.hatena.ne.jp/images/b_entry_de.gif)
![[RSS]](/d/rss10.png)