使用版本控制系统作为数据后端

我参与了一个项目,其中包括存储对大型分层文档(HTML格式文本)的编辑和更改。 我们希望包括文本更改和结构更改的版本控制。

目前我们正在维护关系数据库中的文档部分树,但是当我们开始研究如何管理结构更改的版本时,很明显我们必须编写许多版本控制的function系统提供。

我们不想重新发明轮子。 是否有可能我们可以使用现有的版本控制系统作为数据存储,至少对于文档本身? 据推测,我们可以通过向文件系统写出新版本,并将该目录保持在版本控制下(并以编程方式执行提交等)来实现,但如果我们可以通过代码直接与存储库进行交互会更好。

我们最熟悉的VCS是Subversion,但我对Subversion如何表示对目录结构的更改并不感到兴奋 – 如果我们能够看到特定的修订包括将第2章的内容移到第6章,那就太好了。而不是仅仅看到树的新版本。 这听起来更像是像Mercurial这样的系统处理结构变化的方式。

任何建议? VCS是否有公共API等等? 如果重要的话,该项目采用Java(使用Spring)。

也许您可以使用像Jackrabbit这样的JCR(JSR-170)兼容存储库。 对我来说,你所描述的正是JCR的用途。 看看这篇文章 。

您当然可以通过API对SCM进行编程。 查看SVNKit for Java和Subversion,或者JGit for Java和Git。 Mercurial似乎没有提供这样的API。

无论您做什么,都可以将您的实现包装在合适的API中,这样您就可以将一个SCM换成另一个SCM,或者在将来的某个阶段将SCM的概念包含在内。 然而,这可能是解决问题的实用方法,值得进一步研究。

试试http://svnkit.com/进行Subversion。

这里有一个纯Java SVN lib SVNkit,它可以被Eclipse SVN集成使用,因此它应该相当稳定。