1、引言
考虑以下几种情况:
- 你是否在一个团队中效力?
- 你修改文件而他人也在修改,你修改的内容丢失了?
- 你保存了文件可又后悔了,想把这个文件恢复到修改前的状态?
- 你希望能够查看一个文件的前世?
- 你在项目中发现了 BUG,想立案侦查它是何时产生的?
- 你想快速比较一个文件的幼年和中年的差别?
如果这些问题你都遇到了,那就使用 TortoiseSVN 吧。TortoiseSVN 是 Subversion 的客户端。Subversion 是针对 CVS 的不足而开发的版本控制系统
2、基本概念
2.1 版本库 Repository
Subversion 是版本管理的后台系统,其核心是保存数据的“版本库-repository”。 版本库用分层的“文件-目录”文件系统数来存储数据。连接到版本库的客户能读写数据。版本库记录了你的每一次修改!客户端可以从版本库中取到过去的任何一个版本。
典型的服务器/客户机模型如下图:
2.2 图标重载
TortoiseSVN 最明显的特性之一就是图标重载,重载的图标显示在你的工作副本文件上。你一眼就可以看到文件被修改过了。根据文件的 Subversion 状态的不同,重载的图标
也不同。
显示重载图标的资源管理器:
各图标含义说明:
一个新检出的工作复本使用绿色的对勾做重载。表示 Subversion 状态正常.
在你开始编辑一个文件后,状态就变成了已修改,而图标重载变成了红色感叹号。通过这种方式,你可以很容易地看出哪些文件从你上次更新工作复本后被修改过,需要被提交。
如果在提交的过程中出现了冲突图标变成黄色感叹号。
如果你给一个文件设置了 svn:needs-lock 属性,Subversion 会让此文件只读,直到你获得文件锁。只读文件具有这个重载图标来表示你必须在编辑之前先得到一个锁。
如果你拥有了一个文件的锁,并且 Subversion 状态是正常,这个重载图标就提醒你如果不使用该文件的话应该释放锁,允许别人提交对该文件的修改。
这个图标表示当前文件夹下的某些文件或文件夹已经被计划从版本控制中删除,或是该文件夹下某个受控的文件丢失了。
加号告诉你有一个文件或是目录已经被计划加入版本控制。
对于未受控的文件没有图标重载。这么做是因为图标重载的数量受到系统的限制,应该要节约使用。事实上,你会发现并不是所有的图标被使用在你的系统上。这是由于 Windows限制图标重载不能超过 15 个。Windows 自己用了 4 个,剩下 11 个可被别的应用程序使用。如果你同时使用了 TortoiseCVS,就没有足够的空位了,所以 TortoiseSVN 希望成为一个“良好市民™”,限制自身的使用,为别的应用留下机会
2.3. 右键菜单
所有的 TortoiseSVN 命令都是通过 windows 资源管理器的右键菜单执行。右键点击一个文件或者文件夹,大多数菜单项都能够直接显示。一个命令是否显示取决于这个文件或文件夹或者它们的父文件夹是否受版本控制。
版本控制下一个目录的右键菜单:
2.4. 拖放
在工作副本里右键拖拽文件或目录到新的位置,或者右键拖拽一个非版本控制的文件或文件夹到一个版本控制目录下的时候,右键菜单还能够出现其他的命令。
2.5. 版本库浏览器
TortoiseSVN 的版本库浏览器类似与 Windows 的资源管理器,在版本库浏览器中,能查看版本库的结构和状态。
点击鼠标右键,在弹出的菜单中选择“TortoiseSVN”->“browser
”
在弹出版本库 URL 地址对话框中输入想要查看的版本库URL
地址:
点击“OK”,打开版本库浏览器:
在版本库浏览器中你可以执行比如拷贝,转移,重命名等,这些操作直接在版本库上进行。
在版本库浏览器窗口的顶端输入版本库的 URL 地址和你要浏览的版本号。可以打开特定的版本。
你也可以在版本库浏览器中使用拖拽的操作。如果你把一个文件夹从资源管理器中拖拽到版本库浏览器中,那就实现该文件夹的导入功能。有一点要注意,在导入多个文件时,必须分开一个一个地拖进去
如果要在版本库浏览器中移动一个文件,只用左键拖到它要去的位置。如果你更愿意去拷贝该文件的话,使用这个按住左键拖 。操作就像在资源管理器中一样,拷贝时指针“加” 来标记。
如果你要拷贝/移动一个文件或文件夹到一个新的位置并重命名,你可以右键拖 或者
按住右键拖这个文件,而不用左键拖。这样,就会显示对话框来为该文件或文件夹重命
名。右键菜单
在版本库浏览器的文件或者目录上点击右键,会出现不同的菜单,这些菜单提供了丰富的功能。
3. 日常操作
3.1. 项目入库 Import
所谓的 Import,就是把本地想要进行版本控制的项目文件提交到服务器的版本库中。此时的 SVN 服务器上只是创建了一个空的版本库,并没有包含任何项目文件。
在将项目导入到版本库前,应该进行以下操作:
- 新建一个临时目录、把项目所需的目录及文件拷贝到此临时目录下。
- 删除所有构建工程不需要的文件
- 组织好目录和子目录内的文件
选择临时目录,点击鼠标右键,在弹出的菜单中选择TortoiseSVN”->“Import
,会弹出项目导入对话框:
URL of repository
- 项目导入到版本库的 URL,可以手工输入,也可以点击后面的按钮,打开版本库浏览对话框,选择所需的版本库。
Import mesage
- 输入提交日志信息。便于以后查看。
- 完成后点击“OK“按钮,TortoiseSVN 会把临时目录下所有文件的完整目录树及其内容导入到版本库。
- 临时目录的文件夹名称不会在版本库中出现,只有这个文件夹下面的内容会在版本库中出现。现在这个工程就存贮在版本库,被版本控制。请注意,你用来存放导入文件的临时目录下的文件并没有被版本控制!你需要检出刚才导入的版本,以便获得受版本控制的工作目录。
3.2. 检出工作副本 Check Out
所谓的 Checkout 就是指获得 SVN 服务器端指定的版本库中存储的所有文件,这些文件存在本地的工作副本目录下,并且受到版本控制系统的管理。SVN 的 Checkout 和
Visual Source Safe 的 Checkout 意义完全不一样,VSS 的 Checkout 指的是检出并且锁定某个文件。
SVN 的 Check Out 是第一次连接 SVN 库时使用,相当于 VSS 的 Set Working Folder 和 Get Last version 两个命令。
操作方法:
步骤一:新建一个目录
步骤二:在该目录上点击右键,在弹出的菜单中选择“SVN Check Out
”:
步骤三:在弹出的 Check out 对话框中,在 URL of repository
处选择版本库所在路径
URL of repository
版本库的 URL 地址。
Checkout directory
本地工作目录。
填写好后,点击“OK”按钮,就会把 SVN 服务其上此目录下的内容 Check out 到上面新建的工作目录下。
3.3. 导出项目 Export
所谓 Export,就是把服务器上的项目文件存放到本地目录,Export 到本地目录的这些文件脱离了版本控制系统的控制。一般情况下,为了制作安装包,需要一个“干净“的项目文件。
操作方法:
步骤一:新建一个目录
步骤二:在该目录上点击右键,在弹出的菜单中选择“TortoiseSVN“-> “Export
”
URL of respository
版本库的 URL 地址,可以手工填写,也可以点击后面的按钮,打开版本库浏览器查找。
Export directory
导出到本地的目录。
Revision
要导出的版本:
HEAD revision 最新版本
Revision 指定的版本,如果记不住版本号,可以点击“Show log”按钮查找。
设置完成后,点击“OK”按钮,就会把所选择目录下的所有文件包括目录导出到本地目录下。
3.4. Check Out 和 Export 的区别
check out 方式获得版本后,取到的文件仍处于 SVN 版本控制中。
export 导出版本后,导出的文件脱离 SVN 版本控制。
3.5. 添加文件
将要添加的文件或者目录拷贝到上面新建的目录下,然后在文件或者目录上点击右键,在弹出的菜单中选择“TortoiseSVN”->“Add”
弹出如下对话框:
SVN 会把准备加入的文件及目录显示出来,可以根据需要选择要添加的文件或者目录。
点击“OK”把文件添加到 SVN 中。
在资源管理器中,要增加的文件或者目录图标上有一个白色红底的感叹号。表示工作目录中的文件和版本库中的文件没有同步。
说明:Add 命令只是告诉 SVN 客户端,这些文件将要纳入版本管理,并没有将这些改变提交到 SVN 服务器,如果要提交到版本库中,需要执行“SVN Commit”操作。
3.6. 修改文件
打开工作目录下的文件,直接进行修改,文件修改后,文件的图标会变化。
3.7. 删除文件
选中要删除的文件或者目录,单击鼠标右键,选择“TortoiseSVN”->“Delete”
这样删除后,文件或者目录的图标会相应的变化,此时只是本地工作目录下记录了删除动作,SVN 服务器上的文件还没有真正删除,只有执行 Commit 提交后,SVN 服务
器上的文件或者目录才会真正删除。
注意:千万不要用“Delete”键或者来删除文件,这样删除的话,SVN 客户端不会保存删除操作,将无法提交修改。
3.8. 放弃修改
当添加文件、修改文件、删除文件后,发现添加错误、修改错误、或者误删除文件后,想要放弃修改,可以点击鼠标右键,在弹出的菜单中选择“TortoiseSVN”->“Revert”:
在弹出对话框中,选择要恢复的文件,点击“OK”按钮,就可以恢复到修改前的状态。
说明:Revet 只能撤销本地的修改,不能撤销已经提交(Commit) 的变更
3.9. 查看修改
在提交前可以查看哪些文件在本地或者服务器上已经做了修改。有时我们对工作副本的许多文件进行了修改,这些文件位于不同的子目录。还有一种情况是我们的工作副本已经很久没有执行 Update 命令,我们想看看工作副本中有哪些文件已经发生修改了,这时就可以在工作副本的最上层目录单击右键,在弹出的菜单中选择“TortoiseSVN”->“Check for modifications”
出现如下对话框,会列出所修改的文件:
3.10. 提交入库
确定文件修改正确后,需要把文件提交到 SVN 服务器的版本库中,在需要提交的在文件或者目录上点击鼠标右键,在弹出的菜单中选择“SVN Commit”:
弹出如下提交确认对话框:
在上面该对话框中,可以根据需要填写提交信息,也可以选择要提交的文件。确定后点击“OK”把修改的文件提交入库。
提交完成后,显示信息如下:
3.11. 获取最新的版本
第一次获取最新的版本时,需要用 Check out 命令。
当本地已经有工作副本以后,需要获取最新的版本时,需要用 SVN 的 Update 命令,相当于 VSS 的 Get Last Version 命令。操作步骤如下:
在工作目录上点击鼠标右键,选择“SVN Update”
说明:如果工作目录下有被修改的文件,或者有被删除的文件,并且还没有提交这些更改时,在执行 Update 命令时,这些文件不会被更新。如果想要放弃当前所有更改,并把本地我文件更新成 SVN 服务器上最新的版本,需要先执行“Revert”命令,放弃所有更改动作,然后再执行“Update”命令。
3.12. 获取特定的版本
有时候我们需要回溯到特定的日期或者是版本,查看当时的文件内容,这就需要使用SVN 的 Update to revision 命令。在想要更新的文件或者目录上点击鼠标右键,在弹出的菜
单中选择“TortoiseSVN”->“Update to revision”
:
弹出如下 Update 对话框:
在 Update 对话框中,可以选择更新到最新版本(HEAD),也可以选择更新到特定的版本(Revision)。如果你记不起准确的版本号码,可能只隐约记得大概的时间,没有关系,点击“Show Log”按钮,就可以回顾历史了:
所有曾经做过的更改动作,及其日期与对应的版本都会列在此对话框中,选择所需的版
本,按下“OK”按,这个版本就自动填入到 Update 对话框的 Revision 中,在点击“OK”,你所选择的特定版本就会被取到你的工作目录下。
4. 常见问题
状况 1.报“403forbidden”错误
答:权限问题,表示你没有权限访问,请联系管理员,另外要检查输入路径大小写是否一致,SVN 区分大小写。
状况 2.400 bad request
答:一般都是杀毒软件导致的,请将 SVN 加入到你的可信区。
状况 3.No repository found
答:访问路径不对,请检查你访问的 URL 地址。
状况 4.405 Method not allowed
答:访问断口被封了。
状况 5.Out of date
答:表示版本库的内容比你提交的新,处理方式:先把版本库内容更新下来,然后用你本地的文件覆盖再提交。
状况 6. 提交失败,一个文件夹文字状态“阻碍”,提示“请执行"清理"动作”。
答: 产生这种状态的原因暂未知,可按以下解决方案:
解决方案:
1、备份出现叹号的文件夹
2、新建一个文件夹检出最新版本(无问题的版本)
3、用最新版本对应的文件夹中的.svn 文件夹,替换出现问题的文件夹中的.svn 文件夹,尤其注意要将出现问题的文件夹下的.svn 文件夹完全删除后再替换,以确定这个文件夹版本信息恢复到最新版本。
4、执行清理
5、提交成功