3

以前、ソース管理システムとしてのClearcaseに関する意見を文書化しましたが、残念ながら、現在も使用しています。だから私はあなたたちに私の欲求不満の1つを和らげるのを手伝ってくれるよう頼みます。

特定のファイルが変更された理由を特定する際に発生していた問題のいくつかを改善するために、開発者ごとに1つのブランチからタスクごとに1つのブランチに移行しました。一般的に私は解決策に満足していますが、1つの大きな問題があります。単純なスクリプトを使用してタスクを開始および終了し、ユーザー名とタスク番号で名前が付けられた新しいブランチを作成してから、ローカルスナップショットビューを更新して、次のような構成仕様にします。

    要素*チェックアウト
    要素*.../ martin_2322 / LATEST  
    要素*/main / LATEST -mkbranch martin_2322
    / Project/Applicationをロードします

私のプロジェクトに2つの結合ファイルA.csとB.csがあるとしましょう。最初のタスクでは、ブランチのAに変更を加えます。次に、何らかの理由でタスク2322の作業を停止し、タスク2345の作業を開始する必要があります(タスク2322は終了していないため、メインにマージしません)。新しいタスクブランチ2345を作成し、A.csとB.csの両方を編集して、結果をメインにマージします。ここで2322の作業に戻るので、構成仕様を上記で定義したものに戻します。この時点で、タスクブランチのA.csファイル(以前に編集したので、そのブランチのローカルバージョンを取得します)と最新のファイルが表示されます。メインからのB.csのバージョン。2345ブランチでA.csに変更を加えていないため、ビルドが中断します。代わりに必要なのは、中断したところからタスク2322を取得し、ブランチが作成されたときにメインで最新だった古いバージョンのA.csでそれを表示できるようにすることです。

私の見方では、これを修正するためのいくつかのオプションがあります。

  • 構成仕様を変更して、適切な日付にmainからファイルを取得するようにします。これは、日付がわかっていて手動で設定してもかまわない場合は簡単に実行できますが、これをタスク切り替えスクリプトに自動化する方法がわかりません。ブランチの作成日を取得する方法はありますか?

  • mainの各ブランチにラベルを作成します。理論的には簡単ですが、CCのインストールのラベリングシステムはすでに数百のラベルの重みで崩壊しているため、ブランチごとに開発者ごとに1つ対応できるかどうかわかりません(私の例のタスクに注意してください)は2322であり、プロジェクトの約4分の1しか進んでいません)

  • メインからタスクブランチにマージします。もう一度機能するはずですが、長時間実行されているブランチには、そのタスク用に変更されたファイルだけでなく、無関係なものを機能させるためにマージする必要のあるすべてのファイルが含まれます。これにより、開発者ごとのブランチアプローチと同じくらい複雑になります。特定のタスクを完了するためにどのファイルが変更されたかを確認したい。

ここで何かが足りないことを願っています。設定仕様を設定して、厄介な回避策なしでメインから期待されるファイルを取得する方法があります。では、Clearcaseでどのように分岐していますか?

4

3 に答える 3

4

いくつかのコメント:

  • タスクごとのブランチは、「作業単位」内の一連のファイルを変更するための適切な粒度です。「タスク」が狭すぎない場合、そうでなければ、膨大な数のブランチ (および関連するマージ) が発生します。

  • ブランチの構成仕様を作成するときに、新しい要素の行 (「ソース管理に追加」する行) を忘れているようです。

  • さらに、「A.cs の古いバージョン - ブランチが作成されたときにメインで最新のもの」ビットを解決する、修正の開始点として分岐を検討することもできます。
    すでにラベルが多すぎることはわかっていますが、タスクを「閉じる」スクリプトを作成して、(とりわけ)その開始ラベルを削除し、ラベルが乱雑になるのを防ぐことができます。

ここで私が使用する構成仕様:

element * CHECKEDOUT 
element * .../martin_2322/LATEST  
element * STARTING_LABEL_2322 -mkbranch martin_2322 
# selection rule for new "added to source control" file
element * /main/0 -mkbranch martin_2322 
load /Project/Application

これは、ブランチの日付を計算するよりもはるかに簡単だと思います。

  • 修正を元のタスクに戻す必要がある場合は、タスクをメインにマージし、完成したタスク ブランチから新しい現在のタスク ブランチにいくつかのファイルをマージできることを忘れないでください。
于 2009-06-15T18:31:49.910 に答える
2

cleartoolのdescribeコマンドを使用して、ブランチの作成日を取得できます。

cleartool describe -fmt "%d" -type martin_2322

これにより、ブランチが作成された日時が出力されます。これを使用して、最初のオプションを実装できます。詳細については、次の cleartool man ページを読むことができますが、上記のコマンドが必要なすべてであることを願っています。

cleartool man describe

cleartool man fmt_ccase
于 2009-06-15T15:21:36.073 に答える
1

私たちは Clearcase を使用していますが、リリース用のブランチを作成する方が、タスクごとに作成するよりもはるかに簡単であることがよくあります。タスクごとに作成する場合は、そのリリースの「メインブランチ」を作成し、そのブランチからタスクを分岐し、完了したらマージしてトランクに戻します。

于 2009-06-15T14:35:15.560 に答える