请教cvs,svn之类的版本管理工具的实现思路是什么样的?

大概浏览了下cvs的源代码,发现用c写的。
想请教下,关于版本管理工具的实现思路大致是什么样,肯定没用到数据库,呵呵。
象tag,分支等等是如何实现的,想不太清楚。

还请有了解的人指点,谢谢!

[quote]版本管理工具能够用java来实现吗?[/quote]

完全可以啊,clearcase是不是用java实现的没有了解过,但是clearcase提供java接口可以在上面做二次开发。

[quote]如果被控制文件的版本信息都保存你到数据库中,这样能不能实现?
[/quote]

看你要实现什么功能吧,如果说最简单checkout,checkin,submit这些完全可以实现,例如: 你可以把文件存到数据库,每条记录就是一个revision,有一个专门字段记录这个revision,用户提交检查这个revision判断是否能提交就可以了。

[quote]和cvs或者svn比,差距在什么地方?[/quote]

这个就很重要了,如果你要开发一套版本控制系统,开发前要考虑很多东西:

1 提交的时候有冲突怎么处理
2 提交的时候是否需要上传整个文件,一个文件,你只改了一行提交,上传整个文件就过于浪费带宽
3 web客户端功能
4 tag,branch功能
等等。

http://blind.iteye.com/blog/516527

svn是基于berkeyly文件系统,cvs基于文件系统,基本上每个提交都把文件保存一遍。

SVN的tag, 分支按上面的链接说是完全复制 :x