私は、分散バージョン管理のタオで自分自身を再教育するのに苦労している別のSubversionユーザーです。
Subversionを使用するとき、私はプロジェクトマイナーアプローチの大ファンであり、以前の雇用主のほとんどと一緒にリポジトリブランチを構築しました。次のようなタグとトランク:
branches-+
+-personal-+
| +-alice-+
| | +-shinyNewFeature
| | +-AUTOMATED-+
| | +-shinyNewFeature
| +-bob-+
| +-AUTOMATED-+
| +-bespokeCustomerProject
+-project-+
+-shinyNewFeature
+-fixStinkyBug
tags-+
+-m20110401_releaseCandidate_0_1
+-m20110505_release_0_1
+-m20110602_milestone
trunk
実際のソースツリー内では、次のような構造(のようなもの)を使用します。
(src)-+
+-developmentAutomation-+
| +-testAutomation
| +-deploymentAutomation
| +-docGeneration
| +-staticAnalysis
| +-systemTest
| +-performanceMeasurement
| +-configurationManagement
| +-utilities
+-libraries-+
| +-log-+
| | +-build
| | +-doc
| | +-test
| +-statistics-+
| | +-build
| | +-doc
| | +-test
| +-charting-+
| | +-build
| | +-doc
| | +-test
| +-distributedComputing-+
| | +-build
| | +-doc
| | +-test
| +-widgets-+
| +-build
| +-doc
| +-test
+-productLines-+
| +-flagshipProduct-+
| | +-coolFeature
| | +-anotherCoolFeature
| | +-build
| | +-doc
| | +-test
| +-coolNewProduct
+-project-+
+-bigImportantCustomer-+
| +-bespokeProjectOne
| +-bespokeProjectTwo
+-anotherImportantCustomer-+
+-anotherBespokeProject
アイデアは、リポジトリの構造を使用してエンジニアリングチーム間のコミュニケーションの構造化を支援することでした(現在もそうです)。ビジネスの顧客対応部分およびその他のさまざまな利害関係者とドメインの専門家。
言い方をすれば、「プロジェクト」ディレクトリの1つにあるソースドキュメントは、一度しか使用されません(そしてお金を稼ぎます)。「productLines」ディレクトリの1つにあるドキュメントは、その特定のラインの製品が販売されるたびにお金を稼ぎます。「ライブラリ」ディレクトリの1つにあるドキュメントは、それを使用する製品が販売されるたびにお金を稼ぎます。
これにより、コストの償却という概念が明確になり、ビジネス全体でソースドキュメントの再利用のサポートを構築できます。
また、ビルド自動化ツールが動作できる共通の構造があることも意味します。(私たちのビルドスクリプトは、各コンポーネントのビルド方法を指定する構成ファイルを見つける「ビルド」フォルダーを探してソースツリーを歩きます。ドキュメントの生成とテストでも同様のプロセスが発生します)。
重要なことに、私が作業している製品は通常、パフォーマンス測定と特性評価テストを実行するのに長い時間がかかります。20〜200時間。数GBから数TBの処理済みテスト結果/中間データのいずれかを生成します(保存して特定のシステム構成に結び付けて、経時的なパフォーマンスの向上を測定する必要があります)。この問題により、構成管理が重要な考慮事項になり、通常、パフォーマンス測定と特性評価テストの実行に必要な計算リソースが制限されるため、集中化のための要件も課されます。(64〜128コアの小さなクラスター)。
最後のメモとして。継続的インテグレーションシステムは、ビルドをトリガーする必要があることを知っています。静的分析; トランクが変更されるたび、「タグ」ブランチが変更されるたび、および「自動化」ブランチブランチが変更されるたびに、スモークテストとユニットテストが実行されます。このようにして、個々の開発者は個人システムで重要な機能であるIMHOでCIシステムを使用できます。
さて、ここに私の質問があります:Mercurialで、上記のすべてをどのように複製できますか(できればそれを改善できますか)。
-編集:
私の現在の考え方は、中央のSubversionリポジトリを使用して全体的な構造を定義することですが、クライアントとしてhgを使用できるようにして、開発者がローカルでリポジトリを利用できるようにすることです。