MercurialはGitではない

This entry was posted by on Sunday, 5 June, 2011

……というタイトルの文章を誰か書くべきだと思う。

Gitに初めて触れる人は、(分散)バージョン管理というのはこういうものだ、という認識ができているのではないか、と思った。でもGitはそれなりに特殊なスタイルのバージョン管理システムである。

バージョン管理システムというのは一義にはソフトウェア管理ツールだから(文章の版を管理するのにも使えると思うけど)、あるシステムは何らかの典型的なワークフローを前提としている。GitはLinusがLinuxの開発のために開発されたツールなので、Linuxの開発で採用されているポリシー、考え方、ワークフローが暗黙のうちに組み込まれている。そのまま他のツールに移行しようとしてもなかなかうまく行きはしないものだ。他のツールはたいてい、他の考え方を持っているものだからだ。

Gitに特有なのがブランチの使い方だ。Gitではかなり気軽にブランチを作る。ちょっとした、一日分の作業にもブランチを作り、コミットしていって、それをまとめたものをメインに組み込んだらひと通りの作業が完了という感じ。手元の作業ブランチはそのまま手元にだけ残り、そのうち消える。だが、ここまでブランチが多用されるのはGitぐらいのものだ。Mercurialではそうでもない。Darcsも違う。その違いを意識せずに同じようにブランチを作りまくると破綻する。それはツールが悪いのではなく、使い方が悪いのだ。

じゃあ、Mercurialで大規模開発をするにはどういうふうなワークフローになるのか。どうやって作業するのか。細々した問題はどうやって解決するのか。……というのに答えるには私の経験が足りないのだけど(Mercurial Queuesを使うんですかね)。

Mercurialで大規模な開発をしているプロジェクトというと何があるだろう、などとProject Using Mercurialを眺める。Goかな。Goかも。あとPython? OpenJDKだとかOpenOfficeだとかもあるね。ちょっとこのへんは調査したほうがいいのかもしれない。

Comments are closed.