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

4
我参与了一个项目,其中包括存储对大型分层文档(HTML格式文本)的编辑和更改。我们希望包括文本更改和结构更改的版本控制。
目前,我们在关系数据库中维护文档部分的树形结构,但随着我们开始研究如何管理结构更改的版本控制,很明显我们面临着必须编写许多版本控制系统提供的功能的危险。
我们不想重复造轮子。是否有可能我们可以使用现有的版本控制系统作为数据存储库,至少用于文档本身?我们可以通过将新版本写入文件系统并将该目录保留在版本控制下(并以编程方式执行提交等操作)来实现这一点,但如果我们能够直接通过代码与存储库进行交互,那将是更好的选择。
我们最熟悉的版本控制系统是Subversion,但我对Subversion表示目录结构更改的方式并不满意 - 如果我们能看到特定修订版包括将某个部分从第2章移动到第6章,而不仅仅是看到树的新版本,那将是很好的。这听起来更像Mercurial处理结构更改的方式。
有什么建议吗?版本控制系统是否有公共API等?如果有关Java(使用Spring)的项目,这是否重要?
4个回答

6
也许你可以使用一个符合JCR(JSR-170)标准的仓库,比如Jackrabbit。在我看来,你所描述的正是JCR的用途。可以参考这篇文章

这看起来非常有趣,我会深入研究。不过,我不确定它在处理结构版本控制方面表现如何,仅根据我所能找到的少量讨论,它似乎主要是基于节点层次的版本控制。 - Jacob Mattison

2
您可以通过API编程SCMs。Java和Subversion使用SVNKit,或者Java和Git使用JGit。Mercurial似乎没有提供这样的API。
无论您做什么,请使用合适的API封装您的实现,以便在将来可以将一个SCM替换为另一个SCM,或者甚至可能放弃SCM概念。这可能是解决问题的务实方案,并值得更多探讨。

Git具有非常好的内置内容重新排序支持(因为它是内容可寻址的)。如果分层文档的部分存储为“文件夹中的文件”,那么Git后端将将移动检测为移动而不是删除+插入。SVN在这方面做得很差。 - tucuxi
我更喜欢使用Git而不是SVN,但是对于JGit,我会小心谨慎,因为它在这个阶段缺少很多Git的功能。SVNKit则是一个更成熟的API。 - malaverdiere

0

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接