Subversion(SVN),是一个自由开源的版本控制系统,可以将数据恢复到早期版本,或者检查数据修改的历史,这些数据可以是源代码,也可以是其他类型的文件。
SVN,是一个跨平台的软件,支持大多数常见的操作系统。作为一个开源的版本控制系统,Subversion管理着随时间改变的数据。这些数据放置在一个中央资料档案库(repository)中。这个档案库很像一个普通的文件服务器,不过它会记住每一次文件的变动。这样你就可以把档案恢复到旧的版本,或是浏览文件的变动历史。
TortoiseSVN 是 Subversion 版本控制系统的一个免费开源客户端,可以管理文件和目录。文件保存在中央版本库,除了能记住文件和目录的每次修改以外,版本库非常像普通的文件服务器。你可以将文件恢复到过去的版本,并且可以通过检查历史知道数据做了哪些修改,谁做的修改。
定义
版本控制是管理信息修改的艺术,它一直是程序员最重要的工具,程序员经常会花时间作出小的修改,然后又在某一天取消了这些修改,想象一下一个开发者并行工作的团队 - 或许是同时工作在同一个文件!- 你就会明白为什么一个好的系统需要管理潜在的混乱。
某些版本控制系统也是软件配置管理(SCM)系统,这种系统经过精巧的设计,专门用来管理源代码树,并且具备许多与软件开发有关的特性 - 比如,对编程语言的支持,或者提供程序构建工具。Subversion是一个通用的系统,可用来管理任何类型的文件,其中包括程序源码。
SubVersion:实现服务系统的软件。
TortoiseSVN:是SVN客户端程序,为windows外壳程序集成到windows资源管理器和文件管理系统的Subversion客户端。
SVNService.exe:是专为SubVersion开发的一个用来作为Win32服务挂接的入口程序。
AnkhSVN:是一个专为VisualStudio提供SVN的插件。
历史
在2002年,Tim Kemp 发现 Subversion 是一个很好的版本控制系统,但是没有好的图形化客户端,创建一个作为 Windows 外壳集成的 Subversion 客户端的创意来自 TortoiseCVS,一个非常类似的 CVS 客户端。
Tim 学习了 TortoiseCVS 的源代码,将其作为 TortoiseSVN 的基础,然后开始这个项目,注册了域名 tortoisesvn,并将源代码提交到网上。此时 Stefan Küng 正在寻找一个好的免费版本控制系统,他发现了 Subversion 和 TortoiseSVN,由于 TortoiseSVN 还不能够使用,他加入了这个项目并开始编程。很快他便重写了大多数代码,并且开始添加命令和特性,此时,最初的代码都已经不复存在了。
随着 Subversion 越来越稳定,吸引了越来越多的用户开始使用 TortoiseSVN 作为他们的 Subversion 客户端。用户群增长迅速(每天都持续增长)。Lübbe Onken 提供了许多漂亮图标和 TortoiseSVN 的 logo,细心照料网站并且管理翻译。
2013年6月13日,Wandisco收购TortoiseSVN[dot]Net, TortoiseSVN leader - Stefan Küng加入Wandisco,有了Apache subversion领导开发者Wandisco的支持,TortoiseSVN将会有更多的改进。
特性
是什么让 TortoiseSVN 成为一个好的 Subversion 客户端?下面是一个简短的特性列表。
可选的网络层
Subversion 在版本库访问方面有一个抽象概念,利于人们去实现新的网络机制,Subversion 的“高级”服务器是 Apache 网络服务器的一个模块,使用 HTTP 的变种协议 WebDAV/DeltaV 通讯,这给了 Subversion 在稳定性和交互性方面很大的好处,可以直接使用服务器的特性,例如认证、授权、传输压缩和版本库浏览等等。也有一个轻型的,单独运行的 Subversion 服务器,这个服务器使用自己的协议,可以轻松的用 SSH 封装。
数据处理
Subversion 使用二进制文件差异算法展现文件的区别,对于文本(人类可读)和二进制(人类不可读)文件具备一致的操作方式,两种类型的文件都压缩存放在版本库中,差异在网络上双向传递。
高效的分支和标签
分支与标签的代价不与工程的大小成比例,Subversion 建立分支与标签时只是复制项目,使用了一种类似于硬链接的机制,因而这类操作通常只会花费很少并且相对固定的时间,以及很小的版本库空间。
维护能力
Subversion 没有历史负担,它由一系列良好的共享 C 库实现,具有定义良好的 API,这使 Subversion 非常容易维护,可以轻易的被其他语言和程序使用。
外壳集成
TortoiseSVN 与Windows 外壳(例如资源管理器)无缝集成,你可以保持在熟悉的工具上工作,不需要在每次使用版本控制功能时切换应用程序。
并且你不一定必须使用 Windows 资源管理器,TortoiseSVN 的右键菜单可以工作在其他文件管理器,以及文件/打开对话框等标准的 Windows 应用程序中。你必须牢记,TortoiseSVN 是有意作为 Windows 资源管理器的扩展开发,因此在其他程序可能集成的并不完整,例如重载图标可能不会显示。
重载图标
每个版本控制的文件和目录的状态使用小的重载图标表示,可以让你立刻看出工作副本的状态。
简便访问
Subversion 命令的简便访问所有的 Subversion 命令存在于资源管理器的右键菜单,TortoiseSVN 在那里添加子菜单。
因为 TortoiseSVN 是一个 Subversion 客户端,我们也很愿意为你展示一些 Subversion 本身的特性:
目录版本控制
CVS 只能追踪单个文件的历史,但是 Subversion 实现了一个“虚拟”文件系统,可以追踪整个目录树的修改,文件和目录都是版本控制的,结果就是可以在客户端对文件和目录执行移动和复制命令。
原子提交
提交要么完全进入版本库,要么一点都没有,这允许开发者以一个逻辑块提交修改。
版本控制的元数据
每个文件和目录都有一组附加的“属性”,你可以发明和保存任意的键/值对,属性是版本控制的,就像文件内容。
安装
语言包
TortoiseSVN的界面已经翻译成了许多种语言,所以你可以下载符合你要求的语言包。你可以在我们的翻译状态页里看到语言包。如果没有你需要的,为什么不加入我们的团队并且提交你的翻译呢?-)
每一种语言包都是一个.exe安装程序,只要根据向导运行安装程序,当你下一次启动程序时,翻译就会生效。
拼写检查器
TortoiseSVN包括了一个拼写检查器,可以检查你的提交日志信息,当你的项目语言不是你的本地语言时尤其有用,拼写检查器使用OpenOffice和Mozilla相同的词典。
安装程序会自动增加了美国和英国英语dictionaries.If你想其他语言,最简单的方法是简单地安装一个TortoiseSVN的语言packs.This将安装合适的词典文件以及本地用户theTortoiseSVN interface.Next时间你开始,字典将可用。
或者你也可以自己安装词典。如果你安装了OpenOffice或Mozilla,你可以复制这些词典,位于那些应用的安装目录。否则,你需要从网络上下载必要的词典文件。
一旦你得到了词典文件,你可能需要重命名文件,这样文件名只包含位置信息,例如:
en_US.aff
en_US.dic
然后把它们复制到TortoiseSVN安装目录的bin子目录,通常情况下,可能是在C:ProgramFilesTortoiseSVNin。如果你不希望弄乱bin子目录,你可以将拼写检查文件放置在C:ProgramFilesTortoiseSVNLanguages,如果那个目录不存在,你可以自己创建,当你下次启动TortoiseSVN时,就可以使用拼写检查器。
如果你安装了多个词典,TortoiseSVN使用下面的规则选择一个。
检查tsvn:projectlanguage设置,关于设置项目属性可以参考“项目设置”一节。
如果没有设置项目语言,或者那个语言没有安装,尝试使用对应Windows区域信息的语言。
如果精确的Windows区域信息不起作用,可以试一下“基础”语言,例如将de_CH(Swiss-German)修改为de_DE(German)
工作流程
集中式管理的工作流程如下图:集中式代码管理的核心是服务器,所有开发者在开始新一天的工作之前必须从服务器获取代码,然后开发,最后解决冲突,提交。所有的版本信息都放在服务器上。如果脱离了服务器,开发者基本上可以说是无法工作的。下面举例说明:
开始新一天的工作:
1、从服务器下载项目组最新代码。
2、进入自己的分支,进行工作,每隔一个小时向服务器自己的分支提交一次代码(很多人都有这个习惯。因为有时候自己对代码改来改去,最后又想还原到前一个小时的版本,者看看前一个小时自己修改了哪些代码,就需要这样做了)。
3、下班时间快到了,把自己的分支合并到服务器主分支上,一天的工作完成,并反映给服务器。
这就是经典的svn工作流程,从流程上看,有不少缺点,但也有优点。
版本发布
2012年01月16日,TortoiseSVN 1.7.4 发布。
2012年04月29日,TortoiseSVN 1.7.6 发布。
2012年06月08日,TortoiseSVN 1.7.7 发布,SVN客户端。
2012年08月16日,TortoiseSVN 1.7.8 发布。
2012年09月11日,TortoiseSVN 1.7.9发布。
TortoiseSVN 1.7.11发布