题记:标记为转载是因为该文档是将网上的一些文档整合成的。
svn服务器下载路径:https://www.visualsvn.com/server/download/(此有两个版本根据windows操作系统进行选择)
ToroiseSVN下载地址:http://tortoisesvn.net/downloads.html
安装步骤摘抄文章的路径:http://www.cnblogs.com/xing901022/p/4399382.html
安装步骤出错摘抄路径:http://www.360doc.com/content/13/1006/14/1054746_319355545.shtml
强制使用注释摘抄路径:http://blog.youkuaiyun.com/great3779/article/details/26451477
背景知识
首先要了解SVN是一种集中式管理代码的版本控制系统,原理就是
把代码都保存到一个固定的位置,每次从这个位置拷贝更新代码,进行编辑;再把修改后的代码提交到该目录中。
多人协作开发也是如此。
因此需要一个类似Oracle或者Mysql的服务器用于保存和管理库文件(要保存的代码等文件)的服务端——VisualSVN Server。
还需要一个用户的操作端,用于提交更新检出代码,常用的有Eclipse的Svn插件,以及TortoiseSVN(小乌龟)。
这里推荐使用TortoiseSVN与VisualSVN搭配使用。
如何安装VisualSVN Server
首先去官网下载对应操作系统位数的安装文件:
然后双击安装文件:
接受安装
默认选择即可,第一项是安装VisualSVN Server以及控制台。
最后一项是自动加入环境变量。
选择标准安装(免费),即可。
确认文件安装目录,以及代码库的位置(你的代码想要保存的位置),一旦这个位置的代码库文件被删除,可就无力回天了。
安装即可
确认,直接打开控制管理界面。
安装结束,自动打开控制管理界面。
安装之后出现问题的解决办法:
想在本地建立一个SVN服务器,于是找了个VisualSVN server过来安装,前面还顺利,在设置端口时,选443,提示443已经被占用(HTTPS服务),所以使用8443,目录使用默认的,然后点下一步,但是在安装完服务,启动服务时,报错了:
步骤一)
1.网上邻居->本地连接->属性->internet协议(TCP/IP)->属性->高级->wins标签->去掉启用LMhosts查询前的勾.
2.控制面版->windows防火墙->高级标签->本地连接设置->服务的标签里勾选安全Web服务器(HTTPS)即可.
重新安装,如果还是不行,尝试步骤二:
步骤二)
当安装到Start Service阶段后,将会出错并会弹出一个对话框,提示是否要retry。(此时SVN服务软件已经安装完毕,仅仅是无法通过证书验证,无法启动服务),如果此时选择对话框中的cancel,安装将会回退,卸载已经安装的所有内容,从而无法继续安装。
正确做法是:
1、忽略该对话框。
2、到Windows的开始菜单中找到并运行VisualSVN Server。
3、打开VisualSVN Server软件后,从菜单中找到Properties并执行。
4、从Properties对话框中选择 Certificate Tab页,点击Change Certificate按钮,此时会弹出一个创建证书的对话框,然后根据提示要求一步一步填写相应的信息,就可以创建一个有效的证书。
5、最后,切换到安装VisualSVN Server时包含retry的对话框,点击retry,此时服务就能启动了。
经过如上五步,VisualSVN Server即可成功安装。
如果还是不行,看下步骤三:
步骤三)
我这边出错发现是因为我的计算机名称是中文+英文的方式,因此导致上面步骤4中制作证书是报错,解决办法是把计算机名称改成英文的
这个时候一般是可以了,
进入主界面:
但是使用这边提供的地址:https://ChenXXXXXX:8443/svn/tongtian
会报错:
Path
there
研究了一下,发现是域名问题,改成IP地址就OK了:
https://192.168.234.32:8443/svn/tongtian
现在就可以了
svn的使用方法:
一、强制使用注释:
在很多时候,靠自觉或者说是靠道德,是不行的。必须制定规则,让其强制遵守。程序员也是人,也需要规则。
SVN提交时,如果没有注释,在查阅历史时,会非常不方便。因此我们需要有一个让程序员提交代码时,强制添加注释的规则。下面看看在SVN中怎么实现。
1. 推荐使用VisualSVN作为服务端(免费下载地址:http://www.visualsvn.com/)。安装完毕后,打开VisualSVN Server管理器,在版本库上点击"属性",选择"Hooks"选项,选中"Pre-commit hook"后,点击"Edit".(如下图)
2. 在编辑框中输入如下脚本代码:
@echo off
setlocal
set REPOS=%1
set TXN=%2
rem check that logmessage contains at least 10 characters
rem .....代表5个字符
svnlook log "%REPOS%" -t "%TXN%" | findstr "....." > nul
if %errorlevel% gtr 0 goto err
exit 0
:err
echo 上传失败!请添加注释. 注释长度至少为5个字符. Commit aborted! 1>&2
exit 1
确定即可!
添加Repository与用户等
好的,下面我来添加一个代码库【Repository】,如下图:
按上图所示,创建新的代码库,在下图所示的文本框中输入代码库名称:
注意:上图中的CheckBox如果选中,则在代码库StartKit下面会创建trunk、branches、tags三个子目录;不选中,则只创建空的代码库StartKit。
点击OK按钮,代码库就创建成功了。
创建完代码库后,没有任何内容在里面。我会在这个教程的第二部分说明如何迁入源代码。
下面,我们开始安全性设置,在左侧的Users上点击右键:
输入上面的信息,点击OK,我们就创建一个用户了。按照上面的过程,分别添加用户Developer1、tester1、manager1,好了,我们开始添加这些用户到我们刚才创建的项目里:
点击上图中的"Add..."按钮,在下图中选择我们刚才添加的用户,点击OK按钮:
说明:大家可能注意到了下图中的Groups,是的,你也可以先创建组,把用户添加到各个组中,然后对组进行授权,操作比较简单,在此略过。
按照下图所示,分别对用户【或组】进行授权:
点击"确定"按钮,上面的用户就具有了访问StartKit代码库的不同权限。
因为用户starter在团队中是新来者,不希望他向代码库中提交新代码,所以他只能读取代码 库中的代码,不能提交代码。tester1是测试人员,不负责代码编写,所以也是只读权限。而Developer1和manager1是开发人员和项目经 理,自然具有读、写的权限。
在实际的项目开发过程中,Developer和tester往往不可能只有一个人,这时候使用组来授权更加方便,这个大家可以自己练习一下。
二、TotoiseSVN的基本使用方法
在 项目管理实践教程一、工欲善其事,必先利其器【Basic Tools】中,我已经讲解了怎样安装TortoiseSVN。在上面的讲解中已经讲了怎么使用VisualSVN Server了,今天我要讲的是,TortoiseSVN的简单使用方法。
一、签入源代码到SVN服务器
假如我们使用Visual Studio在文件夹StartKit中创建了一个项目,我们要把这个项目的源代码签入到SVN Server上的代码库中里,首先右键点击StartKit文件夹,这时候的右键菜单如下图所示:
图2-2-1
点击Import,弹出下面的窗体,其中http://zt.net.henu.edu.cn 是服务器名,svn是代码仓库的根目录,StartKit是我们在上个教程中添加的一个代码库:
说明:左下角的CheckBox,在第一次签入源代码时没有用,但是,在以后你提交代码的时候是非常有用的。
图2-2-2
点击OK按钮,会弹出下面的窗体,要求输入凭据:
图2-2-3
在上面的窗体中输入用户名和密码,点击OK按钮:
图2-2-4
如上图所示,好了,源代码已经成功签入SVN服务器了。这时候团队成员就可以迁出SVN服务器上的源代码到自己的机器了。
二、签出源代码到本机
在本机创建文件夹StartKit,右键点击Checkout,弹出如下图的窗体:
图2-2-5
在上图中URL of Repository:下的文本框中输入svn server中的代码库的地址,其他默认,点击OK按钮,就开始签出源代码了。
说明:上图中的Checkout Depth,有4个选项,分别是迁出全部、只签出下一级子目录和文件、只签出文件、只签出空项目,默认的是第一项。上面的例子中,我们也可以使用web的方式访问代码库,在浏览器中输入http://zt.net.henu.edu.cn/svn/StartKit/
这时候也会弹出对话框,要求输入用户名和密码,通过验证后即可浏览代码库中的内容。
搞定!源代码已经成功签出到刚才新建的StartKit目录中。
打开StartKit目录,可以看到如下图的文件夹结构:
图2-2-5
一旦你对文件或文件夹做了任何修改,那么文件或文件夹的显示图片机会发生变化。下图中我修改了其中的二个文件:
图2-2-7
大家看一下不同状态所对应的图片:
图2-2-8
我们已经知道怎么将源代码签入到SVN服务器,怎么从服务器签出代码到本机,也简单了解了不同状态所对应的图案啦。
三、提交修改过的文件到SVN服务器
上面的图2-2-7中,我修改了位于Model文件中的二个文件ImageInfo.cs和NewsInfo.cs,下面演示如何提交到SVN服务器。
注意:提交源代码到服务器时,一定确保本机的代码是最新版本,否则可能提交失败,或者造成版本冲突。
在Model文件夹上点击右键或在Model文件下的空白处点击右键,点击SVN Commit…弹出下面的窗体:
图2-2-9
点击OK按钮后,弹出如下图的窗体:
图2-2-10
四、添加新文件到SVN服务器
我们在Model文件下添加一个新的类文件UserInfo.cs,在Model文件下的空白处点击右键,点击SVN Commit…,和上面讲的提交修改过的文件到SVN服务器一样,就可以了。
另外也可以在文件UserInfo.cs上点击右键,点击TortoiseSVN=>>Add,弹出如下图的窗体:
图2-2-11
选中UserInfo.cs文件,点击OK按钮,这样并没有将这个文件提交到SVN服务器,只是将这个文件标记为源代码库库中的文件,并将其状态置为修改状态。之后,我们要再SVN Commit这个文件一次,才可以将其真正提交到SVN服务器上的代码库中。
上面讲是添加文件,实际上,添加文件夹的步骤也是一样的,这里就不说了。
五、更新本机代码与SVN服务器上最新的版本一致
这个也很简单,只要在需要更新的文件夹上点击右键或在该文件下的空白处点击右键,点击SVN Update,就可以了。
注意:更新操作可能会因为版本冲突而失败,这是可以使用合并【Merge】或其他方法解决;也可能因为锁定【Get Lock】而失败,这是需要先解锁【Release Lock】。
六、重命名文件或文件夹,并将修改提交到SVN服务器
只要在需要重命名的文件或文件夹上点击右键,点击TortiseSVN=>& gt;Rename…,在弹出的窗体中输入新名称,点击OK按钮,就可以了。此方法也不是直接重命名,而是将该文件或文件夹的名称标记为重命名后名称,也 需要我们使用SVN Commit提交到SVN服务器后才真正重命名。
七、删除文件或文件夹,并将修改提交到SVN服务器
最简单就是,你直接删除文件或文件夹,然后使用SVN Commit提交更新到SVN服务器。另外一种方法是在你要删除的文件或文件夹上点击右键=>>TortoiseSVN=>> Delete删除,此方法也不是直接删除,而是将该文件或文件夹的状态置为删除,也需要我们使用SVN Commit提交到SVN服务器后才真正删除。
说明:实际上,从你把源代码迁签入SVN服务器开始,每一个版本的数据和文件,就算是你已经删除了的,也都可以随时迁出。
以上只是TortoiseSVN最简单的几个功能,其实他的功能远不止这些,其他的功能大家可以在使用的过程中慢慢体会,有些功能我会在下面的教程中使用到,到时候会和大家讲清楚用法。
注意:向SVN服务器提交源代码的时候,一定不要提交bin、obj等文件夹,否则会很麻烦。但是web项目的bin目录除外,但是web项目的bin目录中的引用其他项目而生成的dll不需要提交。
一个好习惯:如果项目中引用了其他的第三方的程序集,比如 EnterpriseLibrary、FCKEditor等,这时候不要简单从他们的安装位置引用,而是在你的解决方案下,添加一个Library的目 录,把需要的程序集复制到这里,然后从Library目录引用,这样有什么好处,自己想一想吧!
B. 导入项目(把项目加入代码库)
1、打开已有的项目文件夹,在空白处按下鼠标右键;
2、在弹出的菜单中选择“TortoiseSVN - Import”;
3、选择导入路径file:///F:/repository,填写备注信息,点击“OK”开始导入;
4、导入完成后会弹出提示,可以查看导入的文件,点击“OK”,完成导入。
C. 建立工作目录(检出)
1、新建工作目录文件夹,在空白处按下鼠标右键;
2、在弹出的菜单中选择“SVN Checkout...”;
3、在弹出的对话框中选择库目录、工作目录,点击“OK”开始检出;
4、弹出详细信息对话框,导出完成后,点击“OK”。
可以看到工作目录中多出了版本管理库中的文件,这些文件就是有版本控制的,对这些文件的修改可以保存到库,也可以从库里恢复旧版本的文件。
一般的,也可以在任何地方点击右键,在弹出的菜单中选择“SVN Checkout...”,然后修改检出的文件的保存路径。
D. 更新工作目录
1.对于单机版本管理来说,这个问题基本可以忽略,除非你在好几个地方做了check out然后提交了修改。然后某一天你又到了你常用的目录下工作,然后提交修改,但是这时候你用的版本已经不是最新的了。
2.工作前更新文件是一个好习惯,通常在你对工作目录进行修改前,为保证你的文件是最新的,需要进行更新操作;
3. 在工作目录空白处点击鼠标右键,选择“SVN Update”;
4. 会弹出对话框开始更新,并显示更新了哪些内容,库版本是多少。下面就是我在另外一个目录提交了版本,然后到workSpace目录下,又提交一次update。
E.提交工作目录(Commit、check in)
1、本地目录做了修改,然后需要提交到代码库;
2、在工作目录内的空白处或者目录上点击鼠标右键,选择“SVN Commit”;
3、会弹出对话框,可以输入备注信息,方便以后查看历史记录。
显示将要提交哪些文件,是什么类型改动,点击“OK”开始提交,比如下图是我在文件夹内加了add2.txt文件,然后提交显示add类型改动;
4、弹出对话框显示提交进度,完成后点击“OK”完成。
若不是新加文件,而是修改了已有文件然后提交,会显示文件修改。
F.版本回滚
问题来了,最前面的引言说的,如何退回某一个版本。
1.为了试验更加清晰。我们先提交一次,做个记录。提交时候的log写为:测试版本回滚v7.
2.修改文件,提交第二次,log为test changed 1。
3. 修改文件,提交第三次。
4. 版本回滚到v7.
目前版本9,可以回到版本7。根据版本回滚.
当然,一般的都是根据提交时候的注释回滚。找到某一版本,然后右键选择Update item to revision 或者直接Check Out,两者效果是一样的。
G. 如何新加一个文件
如下,新建了两个文件。
然后新加文件添加到代码仓库,告诉SVN,这两个小弟也帮忙看管着。
右键“TortoiseSVN - add”,弹出对话框选择要添加的文件。若直接在文件上单击右键添加,那么这两个文件会直接添加到版本库,不会给出提示。
添加成功之后会红色提示,表示和版本库不一致,没有同步。提交之后,红色感叹号会变成绿色钩的标记。
提交之后,这两个文件就在代码仓库有了一个备份,下次check out时候就会有这两个文件。
同样道理,要删除文件也必须commit,让SVN知道不再需要管理这个文件,下次check out时候他才不会出现这个文件。
但是,如果按照版本来找,还是可以在当前版本找到被删除的文件的,这就是版本管理软件的优势。
若要取消刚才添加的文件,直接revert 即可,和添加的逻辑刚好相反。