首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Subversion / SharpSvn事务

Subversion / SharpSvn事务
EN

Stack Overflow用户
提问于 2012-02-23 05:02:12
回答 1查看 385关注 0票数 0

我正在尝试同步一个工作流,其中一些操作发生在几个系统之间。其中一个是Subversion,使用SharpSvn,另一个是SqlServer,还有一些是支持分布式事务的系统。

有没有一种方法可以将SharpSvn / Subversion包含在工作流中,并将其注册到事务中,以便在失败的情况下可以回滚?

特别是,我认为Add、Delete是影响本地文件系统的本地事务,Update、Revert、Checkout是针对subversion调用的所有事务。

我在subversion红皮书中没有找到任何关于事务的东西。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-23 06:18:29

Subversion本身没有任何“事务”的概念。修改远程存储库的Subversion命令是原子的,并且许多更改工作副本的命令很容易逆转,因此通常不需要典型意义上的“事务”。如果您的应用程序需要事务,您应该能够组合一个自定义框架来支持这一点(我不知道是否有任何预先构建的解决方案)。

您将遇到的问题很可能是中止事务。如果事务的"prepare“命令提交了传入的更改,则没有简单的方法来”撤消“已经发生的提交。您可以发出第二个commit命令,简单地恢复原始更改(例如反向合并),但这样做会向存储库添加两个新的修订版本(HEAD在失败的事务前后看起来是一样的,但它并不是真正未修改的,因为现在有一个中间修订版本)。您可以使用svnadmin命令转储存储库,并过滤掉您想要回滚的修订,但这是有风险的,而且很容易导致问题。Subversion被设计为不会丢失历史记录,因此从存储库历史记录中删除某些内容肯定很困难(其他修订控制系统,如git,使这一点变得容易得多)。

解决这个问题的一种方法可能是使用git存储库作为传入提交的中转区。当发送事务的"prepare“命令时,传入的更改将提交到git代码库中。如果发送了"abort“命令,则会通过git reset从git代码库中删除提交。" commit“命令将告诉git (通过git-svn)将提交推送到Subversion代码库。这样,除非提交事务,否则Subversion存储库不会被修改,但服务器仍然以一种易于使用的方式缓存数据。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9402926

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档