SVN操作文档.docx
《SVN操作文档.docx》由会员分享,可在线阅读,更多相关《SVN操作文档.docx(26页珍藏版)》请在冰豆网上搜索。
SVN操作文档
SVN操作文档
部门:
总体JAF
编写时间:
2009年2月
1SVN简介
SVN全名Subversion,即版本控制系统。
SVN与CVS一样,是一个跨平台的软件,支持大多数常见的操作系统。
作为一个开源的版本控制系统,Subversion管理着随时间改变的数据。
这些数据放置在一个中央资料档案库(repository)中。
这个档案库很像一个普通的文件服务器,不过它会记住每一次文件的变动。
这样你就可以把档案恢复到旧的版本,或是浏览文件的变动历史。
Subversion是一个通用的系统,可用来管理任何类型的文件,其中包括了程序源码。
SubVersion:
实现服务系统的软件。
TortoiseSVN:
是SVN客户端程序,为windows外壳程序集成到windows资源管理器和文件管理系统的Subversion客户端。
SVNService.exe:
是专为SubVersion开发的一个用来作为Win32服务挂接的入口程序。
AnkhSVN:
是一个专为VisualStudio提供SVN的插件。
2服务器的安装与配置
2.1服务器的安装
VisualSVN的安装非常的简单,整个安装过程不需要用户的很多干预。
1.下载一个subversion的windows的setup程序下载地址:
http:
//subversion.tigris.org/servlets/ProjectDocumentList?
folderID=91&expandFolder=91&folderID=74。
选择Setup-Subversion-1.5.1.en-us.msi下载。
点击安装即可。
在下载一个visualsvnserver,下载地址:
选择download即可。
2.选择程序安装的路径、SubversionRepository(库)的路径和所使用的协议和端口。
3.你可以选择HTTP和HTTPS两种协议,如需使用svn协议也非常的方便,在1.4版本后,Subversion加入了Service运行的功能。
端口号可以任意定义。
对于HTTPS的端口号默认可以选择443和8443,对于HTTP默认可以选择80、8080和81。
我个人偏向于使用HTTPS的8443端口,原因很简单HTTPS安全性比较高,443端口是标准HTTPS端口,如果做WEB开发那肯定就有麻烦,同时Skype也会使用这个端口进行某些通讯(Skype很奇怪的,会使用这标准端口来通讯)。
4.接着就是复制文件的过程。
5.安装完成后会询问你是否需要运行VisualSVNServerManager(一个非常有用的管理工具)
总结:
安装其实是非常简单的,同时建议在安装Repository时可以考虑安装到其他目录,这样比较容易备份。
2.2服务器的配置
装好VisualSVNServer后,运行VisualSVNServerManger,下面是启动界面:
好的,下面我来添加一个代码库【Repository】,如下图:
按上图所示,创建新的代码库,在下图所示的文本框中输入代码库名称:
注意:
上图中的CheckBox如果选中,则在代码库StartKit下面会创建trunk、branches、tags三个子目录;不选中,则只创建空的代码库StartKit。
点击OK按钮,代码库就创建成功了。
创建完代码库后,没有任何内容在里面。
我会在这个教程的第二部分说明如何迁入源代码。
下面,我们开始安全性设置,在左侧的Users上点击右键:
输入上面的信息,点击OK,我们就创建一个用户了。
按照上面的过程,分别添加用户Developer1、tester1、manager1,好了,我们开始添加这些用户到我们刚才创建的项目里:
点击上图中的"Add..."按钮,在下图中选择我们刚才添加的用户,点击OK按钮:
说明:
大家可能注意到了下图中的Groups,是的,你也可以先创建组,把用户添加到各个组中,然后对组进行授权,操作比较简单,在此略过。
按照下图所示,分别对用户【或组】进行授权:
点击"确定"按钮,上面的用户就具有了访问StartKit代码库的不同权限。
因为用户starter在团队中是新来者,不希望他向代码库中提交新代码,所以他只能读取代码库中的代码,不能提交代码。
tester1是测试人员,不负责代码编写,所以也是只读权限。
而Developer1和manager1是开发人员和项目经理,自然具有读、写的权限。
在实际的项目开发过程中,Developer和tester往往不可能只有一个人,这时候使用组来授权更加方便,这个大家可以自己练习一下。
3客户端的安装与配置
1.首先下载SVN客户端:
下载地址:
选择1.5.3版本下载。
2.安装过程很简单,安完后要重启。
4TortoiseSVN常用流程
4.1右键菜单
所有的TortoiseSVN命令都是通过windows资源管理器的右键菜单执行。
右键点击一个文件或者文件夹,大多数菜单项都能够直接显示。
一个命令是否显示取决于这个文件或文件夹或者它们的父文件夹是否受版本控制,你也可以将TortoiseSVN的菜单作为资源管理器菜单的一部分。
4.2导入
在将你的项目导入到版本库之前,你应该:
1.删除所有构建工程不需要的文件(临时文件,编译器产生的文件,例如*.obj,生成的二进制文件,...)
2.组织目录和子目录内的文件。
尽管以后可能会改名/删除文件,我们还是建议你在导入之前使你的项目结构组织良好!
3.现在进入资源管理器,选择你的项目的顶层目录,右击打开上下文菜单。
选择命令TortoiseSVN→导入...,它会弹出一个对话框:
图 5.6. 导入对话框
4.3签出
为了得到一个工作副本,需要进行从版本库检出的操作。
在Windows资源管理器里选择一个存放工作副本的目录。
右键点击弹出右键菜单,选择TortoiseSVN→检出…命令。
然后就会看到下面的对话框:
图 5.7. 检出对话框
如果输入一个并不存在的目录名,那么这个名字的目录就会被创建出来。
4.4提交
将你对工作副本的修改发送给版本库,称为提交修改。
但在你提交之前要确保你的工作副本是最新的。
你可以直接使用TortoiseSVN→更新,或者,你可以先使用TortoiseSVN→检查修改看看哪些文件在本地或是服务器上已经有了改动。
如果你的工作副本是最新的,并且没有冲突,你就已经为提交做好准备了,选择你要提交的文件和/或文件夹,然后TortoiseSVN→提交....
图 5.8. 提交对话框
4.5更新
你应该定期地确保别人作的修改与你的工作副本可以整合。
从服务器上获取改动到你本地副本的过程称为更新。
更新可以针对一个文件、几个选中的文件或是递归整个目录层次。
要进行更新操作,请选择要更新文件和/或路径,右击选择右键菜单中的TortoiseSVN→更新。
会弹出一个窗口显示更新的进度。
别人作的修改将合并到你的文件中,你所做的修改会被保留。
版本库受更新操作的影响。
4.6添加新文件和目录
如果在你的开发过程中你创建了新的文件或目录,那么你需要把他们加入你的版本控制中。
选择那个文件或目录并使用TortoiseSVN→添加(Add).
当你添加了指定的文件/目录到版本控制系统之后,这个文件上会出现一个added标志,这意味着你得先提交你的工作副本使该文件/目录对其他开发者来说成为有效的。
添加一个文件/目录不会not影响版本库
4.7删除、重命名和移动
不像CVS,Subversion允许重命名和移动文件和目录。
因此在TortoiseSVN的子菜单中有删除和重命名的菜单项。
如果你通过TSVN删除了一个文件/目录,吗呢这个文件被移出你的工作副本并标记为删除。
该文件的父目录会覆盖上一个"删除"标记。
你随时可以通过在父目录调用TortoiseSVN→Revert命令来恢复该文件。
如果你想在工作副本中移动文件,那么可以这样使用鼠标拖拽:
1.选择你要移动的文件或目录
2.拖拽(right-drag)他们到新的工作副本下,
3.松开鼠标右键
4.在弹出菜单选择上下文菜单→SVN移动文件。
如果一个文件是通过浏览器而不是使用TortoiseSVN快捷菜单被删除,提交对话框也会显示这些文件并让你在提交前把他们从版本控制中移除。
可是,如果你更新你的工作副本,Subversion将会混淆这个丢失文件并替换他为版本库中的最新版本。
因此,如果你需要删除一个版本控制下的文件,请始终使用TortoiseSVN→Delete保证Subversion不去猜测你到底想干什么。
如果一个目录是通过浏览器而不是使用TortoiseSVN快捷菜单被删除,你的工作副本将回被损坏,并且你将不能提交。
如果你更新你的工作副本,如果你更新你的工作副本,Subversion将用版本库中的最新版本替换已丢失目录。
接下来你就可以使用TortoiseSVN→Delete这种正确的方法来删除它了。
5Eclipse集成
1.下载SVN的Eclipse插件site-1.4.5.zip,可以从SVN的官方网站上下载
下载地址:
http:
//subclipse.tigris.org/install.html。
2.解压后的将plugin和feature文件夹下的文件拷贝到对应的eclipse的plugin和feature夹下。
3.在Eclipse的菜单上添加SVN操作:
6组内SVN使用方式
6.1服务器地址和用户
1.SVN服务器:
10.1.4.17。
2.Abuilder项目路径:
http:
//10.1.4.17:
81/svn/root/trunk。
3.CC上项目路径:
http:
//10.1.4.17:
81/svn/jafcc/trunk。
4.账户名和密码有管理员统一分配。
(默认是用户名:
用户姓名的汉语拼音。
秘密:
1)。
没有用户的找冯庆。
6.2ABuilder开发
1.工作空间统一使用d:
\svn
7高级功能
6.1分支/标记
版本控制系统的一个特性是能够把各种修改分离出来放在开发品的一个分割线上。
这条线被称为分支。
分支经常被用来试验新的特性,而不会对开发有编译错误的干扰。
当新的特性足够稳定之后,开发品的分支就可以混合回主分支里(主干线).
版本控制系统的另一个特性是能够标记特殊的版本(例如某个发布版本),所以你可以在任何时候重新建立一个特定的构件和环境。
这个过程被称作标记。
Subversion没有用于建立分支和标记的特殊命令,但是使用所谓的便宜复制来代替。
便宜复制类似于Unix里的硬连接,它意思是代替一个版本库里的完整的复制,创建一个内部的连接,指向一个具体的版本树。
结果分支和标记就迅速被创建,并且没有在版本库里占据任何额外的空间。
6.2正在合并
这个方法覆盖了你已经在分支(或者最新版本)上做出了一个或多个修改,并且你想将这些修改应用到不同分支的情况。
为了合并版本,你需要进入接收修改的分支的工作副本,经常是trunk。
选择右键菜单TortoiseSVN→合并...。
1.在从:
域输入文件夹在分支或标记中的完整URL,它包含了你想应用到工作副本的修改。
你也可以点击...浏览版本库,找到渴望的分支。
如果你以前已经从这个分支合并过,可以直接从包含历史的下拉列表选择以前使用的URL。
2.因为你要将同一分支的版本范围合并到工作副本,所以要确保使用"从:
"URL检查框选中。
3.在从版本域输入开始版本号。
它是在你要执行合并的修改之前的版本号。
切记为了合并,Subversion将会创建一个差异,所以开始点务必准确。
例如,你的日志象这样:
4.版本注释
5.39.WorkingonMyBranch
6.38.Workingontrunk
7.37.WorkingonMyBranch
8.36.CreatebranchMyBranch
9.35.Workingontrunk
10.34.Workingontrunk
11....
如果你要将MyBranch的修改合并到trunk,应该选择36作为开始版本,而不是象你想的是37。
如果你选择37作为开始点,那么差异引擎将会比较结束点与版本37比较,这就丢失了版本37做的修改。
如果这听起来很复杂,不要担心,在TortoiseSVN中有更简单的方法...
选择版本范围最简单的方法是,点击显示日志,列出最近的修改和日志。
如果你要合并单个版本的修改,直接选取那个版本。
如果你要合并多个版本,就选择范围(使用通常的Shift-键)。
点击确认,就会为你填写合并对话框的全部域,开始版本和结束版本。
当选择了检查框使用"开始:
"URL,只有按钮显示日志可用。
这是因为显示日志对话框设置了全部开始:
和结束:
版本。
所以你只用上面说的多项选择方法即可。
如果你已经从这个分支合并了一些修改,希望你在提交日志中注明最后一个合并的版本号。
这时,你可以在工作服本上使用显示日志对话框跟踪日志。
使用最后合并的版本号作为本次合并的开始版本。
例如,你已经合并了版本37到39,那么本次合并你应该从版本39开始。
12.如果你没有使用显示日志对话框显示版本范围,那么你需要手工设置结束版本。
在范围中输入你想合并的最后一个版本号。
这经常是最新版本,尽管它不必是-你只想合并单个版本。
如果其他用户可能提交,那么要小心使用最新版本。
如果有人在你最近更新之后提交了,它指代的版本可能就不是你想的那样了。
13.点击合并按钮完成合并。
6.3锁
默认情况下,所有的东西都没有锁定,只要有提交权限的人都可以在任何时候提交任何的文件。
其他人会定时更新他们的工作副本,在库中的改变的东西都会与本地合并。
如果你对一个文件取得锁定,那么只有你可以提交这个文件。
其他用户的提交都会被拒绝,直到你释放了这个锁。
一个被锁定的文件不能在库中进行任何形式的合并。
所以它不能除锁的拥用者之外的人删除或更名。
但是,其他用户不必知道你已经增加了锁定,除非他们定期地检查锁定的状态。
这其实没什么意义,因为他们发现提交失败的时候就可以知道锁定了。
为了更容易管理锁,而设置了一个新的Subversion属性svn:
needs-lock。
当一个文件的这个属性被设置(成任意值)的时候,每当该文件检出或更新时,本地的副本都被设成只读,除非该工作副本就是拥有锁的那个用户的。
这么做是为了能警告你,你不应该修改这个文件,除非你申请到了锁定。
受控只读的文件在TortoiseSVN中用一个特殊的图标来表示你需要在编辑前取得锁定。
锁除了按所有者记录外,还在工作副本中记录。
如果你有多个工作副本(在家,在单位),那么在这些工作副本中,只允许对其中一份拥有锁。
如果你的合作者之一请求一个锁,但却外出旅游去了,你怎么办?
Subversion提供了一种强制锁。
释放别人拥有的锁被称为破坏锁定,强制获得别人拥有的锁称为窃取锁定。
当然,如果你想要与你的合作者保持良好的关系,轻易不要这么做。
锁在库中进行记录,一个锁定令牌建立在你的本地工作副本中。
如果有矛盾,比如某人破坏了锁下,那么本地的锁定令牌将不可用。
库中的记录将是最权威的参考。
6.4取得锁定
选择工作副本中你想要获取锁定的文件,然后选择命令TortoiseSVN→取得锁定....
出现一个对话框,允许你输入注释,这样别人可以知道你为什么锁定这个文件。
注释是可选的,并且只用于基于Svnserve的库。
当(且仅当)你需要窃取别人的锁的时候,勾选偷取此锁定复选框,然后点击确定。
如果你选择一个文件夹,使用TortoiseSVN→获取锁定...锁定对话框将显示所有子文件夹中的所有文件。
如果你真的要锁定整个目录,就这么做,但如果你这么做,可能会很不受你的合作者的欢迎。
小心使用...
6.5释放锁定
为了确保你不会忘记释放锁,你不需要做别的事,在提交对话框中,总是会显示锁定的文件,并总是默认被选中。
如果你继续提交,选中的文件中的锁就被移除了,就算你从没有修改过。
如果你不希望释放某文件的锁,你可以取消选中它(如果你没有修改过)。
如果你希望保持一个修改过的文件的锁,你需要在提交之前选中保持锁定复选框。
要手动释放锁定,选中工作副本中要释放的文件,选择命令TortoiseSVN→释放锁定。
不需要输入什么TortoiseSVN会联系版本库并释放锁。
你可以对一个文件夹来使用这个命令释放其中的所有锁定项。
8FAQ
9参考文献:
1)《TortoiseSVN-Windows下的一种Subversion客户端-Version1.4.5》-StefanKüng,LübbeOnken,SimonLarge