ClearCase のブランチとストリームの違いは何ですか?
1 に答える
ブランチは、特定のファイルのバージョンの履歴を並列化するための従来のバージョン管理方法です。「いつブランチする必要があるか」を参照してください
Stream はブランチではありません。これは、その Stream を参照するビューがどのようなベースラインを表示するかを記憶できる単なるメタデータです。
Stream を作成しても、何も起こりません (ブランチは作成されません)。ただし、ファイルがチェックアウトされると
、ストリーム名が使用されます。すべてのビューは、その構成仕様を設定して、ストリームにちなんで名付けられたブランチを作成し、そのブランチでの開発作業を分離します。
(「ClearCase でプロジェクトまたはストリームのスナップショット ビューを作成するにはどうすればよいですか?」を参照してください) 。
これが、ストリームに適切な名前を付けることが重要な理由です: " " という名前のストリームを作成するVonC
と、最終的に (変更されたファイルのバージョン ツリーに) " " という名前のブランチが表示されますVonC
:ブランチ " "の目的は何ですか? VonC
?
「 」という名前のストリームを作成すると、「REL2.2_FIX
」という名前のブランチがREL2.2_FIX
表示され、リリース 2.2 で修正を行うためにそのストリームを参照するビューがあることが推測されます。これは、はるかに便利な名前です。(これが、「開発者モデルごとに1つのストリーム」が好きではない理由です)
したがって、書き込み可能なコンポーネントがある場合、 Stream はブランチのテンプレートと見なすことができます。
- ストリームで必要なものを宣言します (どのベースラインを見たいか)
- そのストリームにビューを作成します
- チェックアウトすると、ストリームにちなんで名付けられたブランチが作成されます。
(これが、非常に多くの UCM ユーザーが「ストリーム」と「ブランチ」を混同または同一視する理由です)
ただし、プロジェクトに書き込み不可のコンポーネントしかない場合、ストリームは、そのストリームで作成する任意のビューで表示するベースライン (コンポーネントのラベル) のリストにすぎません。
これは視覚化メカニズムになり、システムをテストするために一連のコンポーネントの正確なバージョンにアクセスするだけでよいテスト環境に役立ちます。
その場合、どのファイルでもチェックアウトが行われないため、ブランチは作成されません。コンポーネントは UCM プロジェクトで書き込み不可と宣言されます。
Stream とブランチのその他の主な違いは、階層 (親 Stream / サブ Streams) 内の Stream の編成です。
その階層は、ブランチには存在しません: 3 つのブランチがA
ある場合 , B
, C
:
A
作業が終わったら、ブランチからマージする場所がわかりません。- あなたが行うマージは同じ意味を持ちます:
A->B
、またはC->A
、またはB->C
、または ...
Stream を使用すると、次のようになります。
MyProject_Int
|
--MyProject_Dev
|
-- MyProject_Feature1
ストリームの階層は、次の目的で存在します。
- マージの可能なワークフローを導入します(あるストリームから別のストリームにマージする必要がある場所、つまりその親を知っています。必須ではありませんが、少なくとも次のことを視覚的に知る方法があります。
Feature1
は、完全に開発されると、元に戻ります (マージされます)MyProject_Dev
(その親ストリーム)。MyProject_Dev
は、安定した状態に達すると、その親 Stream にマージできます。そこでは、開発が中断されずに進行している間MyProject_Int
に統合テストを実施できます。MyProject_Dev
- これらのマージに意味を追加します:
- サブストリームからその親または他の親ストリームへのマージ (たとえば、必要に応じて から
MyProject_Feature1
に直接マージできMyProject_Int
ます) は、 と呼ばれますdeliver
。 - 親ストリーム ( など
MyProject_Dev
) から直接のサブストリーム ( ( など) へのマージは、MyProject_Feature1
と呼ばれrebase
ます。
その目的は、Feature1
が の最新の変更で開発されていることを確認しDev
て、最終的な配信を可能な限り簡単にすることです。 2 つの Streams から派生した 2 つのブランチの 2 つの並列化された履歴の間で、共通のコード セットが大きく分岐することはありませんでした。
- サブストリームからその親または他の親ストリームへのマージ (たとえば、必要に応じて から
これら 2 つの UCM 操作deliver
とrebase
は、その核心において、2 つのブランチA
との間の単純なマージにすぎないことに注意してくださいB
。ただし、それらの名前から、任意の 2 つのブランチ間だけでなく、サブストリームと親ストリーム ( )、または親ストリームとサブストリーム ( )
の間でマージすることがわかります。deliver
rebase