2009-06-15 13 views
2

私は以前にdocumented私の意見をソース管理システムとしてClearcaseに残しましたが、残念ながら私はまだそれを使用しています。だから私はあなたに私の欲求不満の一つを緩和するのを手伝ってくれます。Clearcaseで最も良い方法は?

私たちは、特定のファイルが変更された理由を判断する際に発生した問題のいくつかを改善するために、開発者単位の1つのシステムから1つのタスクに分岐しました。一般的に私はこのソリューションに満足していますが、大きな問題が1つあります。私たちは、開始するには、簡単なスクリプトを使用して、エンドユーザ名とタスク番号と名前の新しいブランチを作成して作業をして、次のような設定の仕様を持っているために、ローカルスナップショットビューを更新しています

 
    element * CHECKEDOUT 
    element * .../martin_2322/LATEST 
    element * /main/LATEST -mkbranch martin_2322 
    load /Project/Application 

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

  • 変更設定仕様:

    私はそれを参照してください方法は、私はこの問題を解決するには、いくつかのオプションがあります。これは、私が日付を知っていて手で設定しても構わないが、タスクを切り替えるスクリプトにどのように自動化するのか把握できない場合は、十分に簡単です。ブランチの作成日を取得するにはどうしてですか?

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

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

私はちょうどここに何かが欠けだし、それは不格好な回避策なしメインから期待されたファイルを取得するように私の設定の仕様を設定する方法がある願っています。では、Clearcaseでどのように分岐していますか?

+0

ブランチ間の切り替えを管理するための別のソリューション(IMO)が追加されました。 – VonC

+0

「新しいファイル」選択ルールについてのコメントを追加しました。確かに、あなたの現在の設定仕様を続行する前に慎重に検討し理解するもの。 – VonC

答えて

1

cleartoolでの説明コマンドを使用すると、ブランチの作成日を取得できます。

cleartool describe -fmt "%d" -type martin_2322 

これは、ブランチが作成された日時を出力します。これを使用して、最初のオプションを実装することができます。詳細については、次のcleartoolのマニュアルページを読むことができますが、うまくいけば上記のコマンドだけで十分でしょう。

cleartool man describe 

cleartool man fmt_ccase 
+0

パーフェクト、ありがとう。バッチ書込みスキルをテストに入れてスタートタスクスクリプトを修正するための時間は今日ありませんが、少なくとも私はconfig specを手動で更新するための適切な時間を簡単に見つけることができます。 –

1

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

+0

タスクのリリース/ブランチのためのメインブランチ/ブランチの提案はまさに私たちがやっていることですが、これは上で概説した2つのタスクを実際には並列処理できない問題につながります。私たちは開発者ごとに分岐していました。つまり、すべてのタスクが同じブランチにあるため、これらの問題は発生しませんでしたが、Clearcaseには「作業単位」の概念がないため、どの変更がどのタスクに属するのかを判断することができなくなりました。 –

+1

はいできます。それぞれの「タスク」に1つずつ、2つのビューを作成します。次に、diffツールを使用して、あるブランチから別のブランチへのポート変更に対する変更をマージすることができます。 –

+0

ここであなたが言っていることは有用だと感じていますが、私はそれを理解していません。ビューとはスナップショットビューを意味しますか?私は実際には、あるブランチから別のブランチへの変更をマージしようとはしていません、私はメインにマージされた変更が既に既存のブランチに表示されないシステムを探しています。 –

4

いくつかのコメント:

  • タスクごとの分岐は「作業単位」内のファイルのセットを変更するための適切な粒度です。そうでなければ、枝(およびそれに関連するマージ)のgazillonで終わる、「タスク」は狭すぎるではありません提供

  • あなたがブランチの設定仕様を作成するとき、あなたは明らかに新しい要素の行を忘れます(あなたがソース管理に追加するもの)

  • さらに、「旧バージョンの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 

私は枝の日付を計算するよりも、このはるかに簡単に見つけるだろう。

  • あなたが戻っていくつかのあなたの修正を改造する必要がある場合は、同様にあなたの新しい現在のタスクブランチに完成したタスクの枝からいくつかのファイルをマージし、メインにあなたのタスクをバックマージすることができます忘れないでくださいその現在の仕事も同様です。
+0

コメントをいただきありがとうございます。私は自分の設定仕様に問題はなく、新しいファイルを追加しましたが、もう一度見ていきます。私はラベルが最善の方法であることに同意しますが、サーバー上にフットプリントがあるものは何でもするためにさまざまな物流上の問題があります。今は本当にオプションではありません。私が正しい道を歩いていたことを知って、 "私が命令したいと思うように働くタスクブランチを作っていない"ことを知ってよかった - それが私の主な恐怖でした。 –

+0

>私は自分のconfig specに問題があり、新しいファイルを追加していません。 Hum ...私は実際にそれを調べます:あなたの現在の設定仕様では、新しいファイルがメインブランチに直接表示されます! (分離なし)。その新しいファイルが変更された場合、それはタスクブランチにあります。私はタスクブランチで直接新しいファイルを作成し、必要なときにのみメインブランチに戻すことをお勧めします。 – VonC

関連する問題