私の会社では現在、Subversion、CVS、Mercurial、および git を使用しています。
5 年前に始めたとき、私たちは CVS を選びました。今でも私の部門ではメインの開発およびリリース メンテナンス ブランチに CVS を使用しています。しかし、私たちの開発者の多くは、CVS ブランチ (特にそれらをマージすること) の手間をかけずにプライベート チェックポイントを作成する方法として Mercurial を個別に使用しており、約 5 人までのいくつかのブランチで Mercurial を使用し始めています。1 年以内に最終的に CVS を廃止する可能性は十分にあります。Mercurial の使用は有機的に成長しました。CVS に満足しているからといって、いまだに触れない人もいます。Mercurial を試したことのある人は皆、学習曲線をほとんど使わずに満足しています。
Mercurial でうまく機能するのは、(自家製の) 継続的インテグレーション サーバーが開発者の Mercurial リポジトリとメインラインを監視できることです。そのため、人々は自分のリポジトリにコミットし、継続的インテグレーション サーバーにチェックしてもらい、変更セットを公開します。多くのプラットフォームをサポートしているため、適切なレベルの手動チェックを行うことは現実的ではありません。もう 1 つの利点は、マージが簡単な場合が多く、困難な場合でも、マージを適切に行うために必要な情報が得られることです。誰かがマージされたバージョンを機能させると、マージ変更セットをプッシュすることができ、他の誰もその作業を繰り返す必要はありません。
最大の障害は、開発者とマネージャーの頭脳を再配線して、単一の線形ブランチ モデルから脱却させる必要があることです。これに対する最善の薬は、集中型 SCM を使用する場合は愚かで醜いことを告げる Linus Torvalds の服用です。優れた履歴視覚化ツールが役立つでしょうが、利用できるものにはまだ満足していません.
Mercurial と CVS はどちらも、Windows、Linux、Solaris を組み合わせて使用している開発者にとってはうまく機能し、タイムゾーンに問題はありませんでした。(実際、これはそれほど難しくありません。内部でエポック秒を使用するだけで、すべての主要な SCM システムでこれが正しく行われると思います)。
かなりの努力で、メインラインの CVS 履歴を Mercurial にインポートすることができました。ヒストリー移行ツールをテストする方法として、メインラインの CVS ヒストリーにコーナー ケースを意図的に導入しなければ、もっと簡単だったでしょう。これには、いくつかの Mercurial ブランチを CVS 履歴にマージすることが含まれていたため、プロジェクトは初日から使用されていたように見えます。
私たちのシリコン設計グループは Subversion を選びました。それらは主に私のオフィスから 8 タイムゾーン離れており、オフィス間のかなり良好な専用回線でさえ、SUBversion のチェックアウトは面倒ですが、実行可能です。集中型システムの大きな利点は、すべての分散リポジトリを巨大にすることなく、大きなバイナリ (ベンダー リリースなど) をシステムにチェックインできる可能性があることです。
Linux カーネルの操作には git を使用します。ネイティブの Windows バージョンが完成すれば、Git の方が適していると思いますが、Mercurial のデザインは非常にシンプルでエレガントなので、そのまま使い続けるつもりです。