2012-02-22 12 views
0

いくつかのアクションがいくつかのシステムで実行されるワークフローを同期しようとしています。これらのシステムの1つはSubversionで、SharpSvnを使用し、もう1つはSqlServerであり、他は分散トランザクションをサポートするシステムです。Subversion/SharpSvnトランザクション

ワークフロー内にSharpSvn/Subversionを組み込み、障害発生時にロールバックできるようにトランザクション内に登録する方法はありますか?

特に、ローカルファイルシステムに影響を及ぼすローカルトランザクションであるAdd、Delete、Subversionに対して呼び出されたすべてのトランザクションであるUpdate、Revert、Checkoutが考えられます。

私はSubversionのred-bookにトランザクションについて何も見つかりませんでした。

答えて

1

Subversion自体には、「トランザクション」という概念自体はありません。リモートリポジトリを変更するSubversionコマンドはアトミックであり、作業コピーを変更する多くのものは簡単に元に戻すことができるので、典型的な意味での「トランザクション」の必要はありません。アプリケーションでトランザクションが必要な場合は、これをサポートするカスタムフレームワークを組み込むことができます(事前に構築されたソリューションはわかりません)。

問題が発生すると、トランザクションが中止される可能性があります。トランザクションの「準備」コマンドが入ってくる変更をコミットした場合、すでに起こったコミットを元に戻す簡単な方法はありません。元の変更(逆引きなど)を元に戻すだけの2回目のコミットを発行できますが、これを実行すると2つの新しいリビジョンがリポジトリに追加されます(HEAD )。は失敗したトランザクションの前後に同じですが、 真には中間改訂版があるので未修正です)。 svnadminコマンドを使用してリポジトリをダンプし、ロールバックしたいリビジョンを除外することはできますが、これは危険で簡単に問題につながる可能性があります。 Subversionは履歴を失わないように設計されているので、リポジトリの履歴から何かを削除することは必然的に困難です(gitのような他の改訂管理システムはこれをはるかに簡単にします)。

これを回避する方法の1つは、着信コミットのステージング領域としてgitリポジトリを使用することです。トランザクションの "prepare"コマンドが送信されると、入ってくる変更がgit repoにコミットされます。 "abort"コマンドが送信された場合、コミットはgit reset経由でgit repoから削除されます。 "commit"コマンドはgit(を介して)にコミットをSubversionリポジトリにプッシュするよう伝えます。この方法では、Subversionリポジトリはトランザクションがコミットされない限り変更されませんが、サーバはまだ扱いやすい方法でキャッシュされたデータを保持しています。

+0

私は疑いがありました。ありがとうございました。 – cmdematos

関連する問題