2012-02-22 34 views
0

我正在嘗試同步一個工作流,其中一些操作發生在幾個系統之間。其中一個系統是Subversion,使用SharpSvn,另一個是SqlServer,還有一些是支持分佈式事務的系統。Subversion/SharpSvn交易

有沒有一種方法可以將SharpSvn/Subversion包含在工作流中,並將其註冊到事務中,以便在發生故障時可以回滾?

特別是,我想添加,刪除是本地事務影響本地文件系統和更新,恢復,簽出這些都是針對顛覆調用的交易。

我還沒有在顛覆紅皮書中發現任何有關交易的內容。

回答

1

顛覆本身本身沒有任何「交易」的概念。修改遠程存儲庫的Subversion命令是原子的,許多改變工作副本的命令很容易反轉,因此通常不需要典型意義上的「事務」。如果您的應用程序需要事務處理,您應該可以將自定義框架放在一起以支持此操作(我不知道任何預先構建的解決方案)。

您遇到的問題可能會中止交易。如果事務的「準備」命令提交傳入的更改,則沒有簡單的方法來「撤消」已發生的提交。您可以發出第二次提交,簡單地恢復原來的變化(如反向合併),但這樣做會增加兩個新修訂的倉庫(HEAD 看起來相同之前和失敗的交易之後,但它不是真正未修改,因爲現在有一箇中間修訂)。您可以使用svnadmin命令來轉儲存儲庫並過濾掉想要回滾的修訂版本,但這樣做有風險並且很容易導致問題。顛覆的設計使得它不會失去的歷史,因此刪除庫歷史的東西必然是困難的(其他版本控制系統,如git,使這更容易)。

解決這個問題的方法之一可能是使用git存儲庫作爲傳入提交的臨時區域。當事務的「準備」命令被髮送時,傳入的改變被提交到git倉庫中。如果發送「abort」命令,則通過git reset從git repo中刪除提交。 「提交」命令會告訴git(通過git-svn)將提交推送到Subversion回購。這樣一來,Subversion版本庫沒有被修改,除非事務被提交,但服務器仍然在某種程度上這是易於使用緩存的數據。

+0

正如我懷疑。謝謝。 – cmdematos 2012-02-23 14:01:11