2009-07-30 3 views
2

私は動的なビューでいくつかの操作を実行する必要があるプロジェクトがあります。これらの操作のいずれかが失敗した場合、またはプログラムに何らかのエラーが発生した場合は、コミットを取り消す必要があります。ほとんどの原子を実装するClearCaseはコミットを

まっすぐな方法は、単にコマンドをキューに入れて、プログラムが処理を終えたら、そのキューを実行することです。しかし、私はコミットを中断し、サーバー上で矛盾したデータセットを引き起こすいくつかの例外的なイベントが心配です。

つまり、Clearcaseダイナミックビューでsvnスタイルの「チェンジセット」を作成する方法を探しています。私が使っているスクリプト言語はPerlです。

アイデア?

+0

あなたのUCMの文脈に応答するように更新されました。 (UCMではストリームをロックすることができますが、同じ結果が得られます) – VonC

+0

あなたの非UCMコンテキストの回答が更新されました(申し訳ありませんが、あなたの前のコメントを少し早く読んでいました)。要するに、ブランチのロックは機能します。 – VonC

+0

動的なビューを持つユーザーがチェックインしているファイルの部分的な内容を持つことを避けるための提案を追加しました。 – VonC

答えて

5

ClearCaseでの操作のアトミック性は、ファイルレベルであるため、svn changeset(つまり、「リビジョン」)に厳密に相当するものはありません。

ClearCaseのチェンジセットに最も近いのは、アクティビティ(UCM)の概念、またはファイルのコレクションに設定されたラベルです(UCMベースラインは、移動できないラベルを表しているため実際に近いです)。ファイルの事前定義されたセット - UCMコンポーネント - )

さて、UCMかどうかは、私が推薦する:

  • あなたがチェックインに (そのようになりますどのをロックし、ボブはまだアクセス可能で、誰も他のバーを追加しようとしていない枝は、あなたが「ct rmver」のバージョンを追加することができ、まだロックされている間、あなたの「アトミック」運転時に、その特定のブランチ上のONS)
  • あなたのチェックイン
  • をしますが、トラブルの場合は、分岐

のロックを解除します。 (注意:注意して使用する:rmverを元に戻すことはできません)

  • 注1:あなたはUCMで作業されていない場合は、あなたがそれらをrmverすることができるようにするために、すべてのチェックインのバージョンを記録する必要があります

  • 注2:私が "支店をロックする"と言ったとき、私はコースの意味: "あなた以外の誰でもロックする"(-nusers yourLogin)。そうすれば、あなただけはそれはあなたが)(メインまたは別の作業しているブランチの最新のすべてのファイルに適用されます(チェックインをすることができます。


問題を、このアプローチでは、何でありますクライアント(ブランチの最新で自分ダイナミック景色を他のユーザー)中にあなたのアトミックトランザクションが表示されます。
ものはダイナミック図であるので、これらのファイルがにチェックインしている間、彼らがチェックインファイルが表示されます1つ1つ、それは良いことではないかもしれません。すべてのプロセスに1分以上かかる場合はd。

一つの解決策は、それらのクライアントビューは、次のように自分の設定の仕様を設定していることであろう。

element * .../myBranch/FREEZED_LATEST 
element * .../myBranch/LATEST 

あなたがコミットアトミックチェンジをしていない場合は、ラベルFREEZED_LATESTが存在せず、すべてのクライアントビューがありますLATESTを表示する必要があります。どんなチェックインもすぐに全員が見ることができます。
しかし、あなたのアトミックコミット時に、あなたはできます

  • は、最初の(つまり、現在LATESTに)現在のすべてのファイルにラベルFREEZED_LATESTを設定
    意味し、すべてのクライアントが唯一の中にそれらの特定のバージョンが表示されますアトミック
  • はあなたのプロセスを行うコミット:(
  • はラベルFREEZED_LATESTを削除(すべての方法、またはロールバックのいずれかの方法を、ブランチがロックされ、クライアントの設定スペックはまだ同じ「フリーズ」内容を示して)すべてのクライアントは、アトミック操作の結果として新しいLATESTを見て、新しいvアトミックcommits.Youが1つの単位として一連のファイルを扱うことができ、より与えられたcriteria.Forに基づいて、あるいはロールバックそれらをチェックしますV7.1.1のClearCaseと自分自身のいくつかのチェックアウトとersions)
+0

私はUCMで働いていません。 質問:ロックのマニュアルページを正しく読んでいる場合、チェックアウト/チェックインは停止しますか? "#チェックアウトやチェックインでブランチを修正できないと言います #チェックアウトを使用してチェックアウトをキャンセルします"そのブランチタイプ自体、またはその内部の要素を変更することに特有ですか? –

+0

「例外的な」状況では何をお勧めしますか?たとえば、チェックイン時にその間にコピーが作成されます。ある人がチェックインの一時ブランチを作成し、すべてが完了したら2つのブランチをマージすることを提案します。 (しかし、それは同じ問題を抱えて、約200ファイルのマージである)。 –

+0

問題を延期するだけなので、tempブランチはお勧めしません。ブランチをロックしている場合は、チェックインしているファイルをコピーする人はいませんが、チェックインしていないファイルもあります。彼らのために、彼らの見解の更新が必要になるでしょう。 – VonC

0

他のすべてのユーザーをロックアウトします。

サーバーのバックアップを取ってください。

あなたのコミットをしましょうか。

何かがひどく間違っている場合は、バックアップからクリアケースを復元してください。

+0

残念ながら、この環境では受け入れられません。多くのユーザーがおり、サーバーに継続的にアクセスする必要があります(ただし、このファイルにはアクセスできません)。 –

+0

個人的には、私はクリアケースが嫌い、職場で使う必要があります。あなたは何とかファイルを保護できる必要があると言われています。おそらく、他のすべてのファイルから独立したVOBにそれらを持っているでしょう。それ以外は、tarでファイルをバックアップするだけです。 – Juan

0

私は長年に渡ってクリアケースを使用していませんでしたので、ここではいくつかの迷いや素朴な考えがあります。

ファイルが同期していないかどうかを調べてください。

あなたがチェックインする前にチェックインしようとしているすべてのファイルをロックし、ロックに失敗した場合は、便利なメッセージで中止してください。

チェックインを「削除」できますか? HEADは以前のバージョンを見ますか?チェックインの取り消しを定義してください。

一時的なブランチを作成し、チェックインしてからマージ/リベースすることができますか? あなたのロールバックはブランチを殺すことです。それは分岐のためにクリアケースを呪う同僚を覚えていますが。

一般に、キューイングアクションは優れていますが、キューを使用して潜在的な問題が発生する前に特定します。さらに、あなたのアクションとそのUNDO基準を定義します。したがって、疑似原子でないものを実行したい場合は、「これは面倒です」と警告することができます。

+0

私が使っている操作は非常に単純です:チェックアウト、チェックイン、マージ。私はファイル上でいくつかの "automagic"をやっています。 私は「go」コマンドを持っていて、「go」、「go」の途中で何かヒンキーが起こった場合、「go」が停止し、リポジトリが元の状態になるように変更が元に戻ります"go"を押す前に。 –

関連する問題