SVN使用详解
SVN
svn = 版本控制 + 备份服务器。
(一)SVN
每上传一个服务器档案内容,它会自动的赋予每次的变更一个版本,我们用来存放上传档案的地方叫做Repository,第一次有一个新增档案的动作,将想要备份的档案放到Repository上面,日后我们有任何修改是都可以上传到Repository上面,上传已经存在且修改过的档案叫做commit,每次上传都赋予它一个新的版本,同时,也会把它上传的时间记录下来,日后需要从Repository下载曾经提交的档案,可以提取最新版本和之前的任何一个版本,还可以根据日期来提取需要的版本。
(二)SVN工作原理
SVN是一种集中的分享信息的系统,它的核心是版本库,储存所有的数据,版本库按照文件树的形式储存数据(包括文件和目录),任意数量的客户端可以连接到版本库,读写这些文件,修改这些文件。
文件树结构如下
| 2014.12.3
| |aa.txt
| |xx.txt
| 2014.12.4
| |aa.txt
| |xx.txt
| 2014.12.5
| *
| *
(三)SVN功能简介
1.Repo-Browser:版本库浏览:
2.ShowLog:显示日志:显示之前提交过的项目。
3.CheckOut:点击弹出提示框,在URL of repository输入框中输入服务器仓库地址,
在Checkout Directory输入框中输入本地工作拷贝的路径,点击确定,即可提取出服务器上的配置库
4.Check for Modifications:检查更新
5.Revision Graph:版本分支图
6.Resolved:解决冲突:如果当前工作拷贝和版本库上的有冲突,不能自动合并到一起,那么当你提交修改的时候,tortoisesvn就会提示你存在冲突,这时候你就可以通过这个菜单项来解决冲突。冲突的解决有两种,一种是保留某一份拷贝,例如使用配置库覆盖当前工作拷贝,或者反过来。还有一种是手动解决冲突,对于文本文件,可以使用tortoiseSVN自带的工具,它会列出存在冲突的地方,然后你就可以和提交者讨论怎么解决这个冲突。同时它也对Word有很好的支持。
7.Update to Revision:更新至版本:从版本库中获取某一个历史版本。这个功能主要是方便查看历史版本用,而不是回滚版本。注意:获取下来之后,对这个文件不建议进行任何操作。如果你做了修改,那么当你提交的时候SVN会提示你,当前版本已失效(即不是最新版本),无法提交,需要先update一下。这样你所做的修改也就白费了。
8.Revert:回滚:如果你对工作拷贝做了一些修改,但是你又不想要了,那么你可以使用这个选项把所做的修改撤销
9.Cleanup:清除状态:如果当前工作拷贝有任何问题的话,可以使用这个选项进行修正。例如,有些文件原来是版本控制的,但是你没有通过tortoiseSVN就直接删除了,但是tortoiseSVN还是保留着原来的信息(每个文件夹下都有一个.svn的隐藏文件夹,存放着当前文件夹下所有文件夹的版本信息)所以这就会产生一些冲突。可以使用cleanup来清理一下。
10.GetLock/ReleaseLock:加锁/解锁:果你不想别人修改某个文件的话,那么你就可以把这个文件进行加锁,这样可以保证只有你对这个文件有修改权。除非你释放了锁,否则别人不可能提交任何修改到配置库中。
11.Branch/tag:分支/标签: Branch是分支的意思。例如当在设计一个东西的时候,不同的人有不同的实现,但是没有经过实践检验,谁也不想直接覆盖掉其他人的设计,所以可以引出不同的分支。将来如果需要,可以将这些分支进行合并。
tag是打标签的意思。通常当项目开发到一定程度,已经可以稳定运行的时候,可以对其打上一个标签,作为稳定版。将来可以方便的找到某个特定的版本(当然我们也可以使用版本号来查找,但是数字毕竟不方便)SVN对于分支和标签都是采用类似Linux下硬链接的方式(同一个文件可以存在两个地方,删除一个不会影响另一个,所做修改会影响另一个),来管理文件的,而不是简单的复制一份文件的拷贝,所以不会有浪费存储空间的问题存在。
12.Switch:切换: 文件创建分支后,你可以选择在主干工作,还是在分支工作,这时候你可以通过Switch来切换。
13.Merge:合并:主干和分支的版本进行合并,在源和目的各输入文件的路径,版本号,点击确定。系统即对文件进行合并,如果存在冲突,请参考冲突解决。
14.Export:导出:把整个工作拷贝导出到本地目录下,导出的文件将不带svn文件标志,文件及文件夹没有绿色的”√”符号标志。
15.Relocate:重新定位: 当服务器上的文件库目录已经改变,我们可以把工作拷贝重新定位,在To URL输入框中输入新的地址
16.Add to Ignore List:添加到忽略列表: 大多数项目会有一些文件(夹)不需要版本控制,如编译产生的*.obj, *.lst,等。每次送交,TortoiseSVN提示那些文件不需要控制,挺烦的。这时候可以把这些文件加入忽略列表。
17.Relocate:版本库转移:当我们版本库发生转移的时候就需要用到这个功能了。例如我原先的版本库是建在U盘上的,现在转移到(复制整个配置库文件夹)开发服务器上,使用https代替文件系统的访问。因此就需要将原来的工作拷贝的目标版本库重新定位到开发服务器上。
18.Create patch:创建补丁:创建补丁。如果管理员不想让任何人都随便提交修改,而是都要经过审核才能做出修改,那么其他人就可以通过创建补丁的方式,把修改信息(补丁文件)发送给管理员,管理员审核通过之后就可以使用apply patch提交这次修改了。
19.Apply patch:提交补丁。
20.Properties:属性允许用户在文件或目录上发明任意名称的版本化属性和非版本化属性,唯一的限制就是“svn:”是Subversion本身的保留前缀,用户可以设置这些属性来改变Subversion的行为方式,用户不能发明新的“svn:”属性
21.Setting:SVN设置
22.about:关于SVN版本的信息
23.help:关于SVN使用的帮助。
24.Add:添加未受版本控制的文件到版本控制中。
25.Delete:删除服务器上的文件。
26.Rename:重新命名文件
28.Import:将未版本化的文件导入版本库和Add差不多。
29.ShowLog->Compare with working copy:工作副本与指定文件版本区别。
30.ShowLog->Show changes as unified diff:将所选中的版本作为单一差异文件查看。
31.ShowLog->Compare with previous revision:比较选中的版本和以前版本,对于文件夹,这个选项首先会显示已修改的文件对话框让你选择要比较的文件。
32.ShowLog->Browse repository:打开版本浏览器,基于选中的版本,在版本库中检查选中的文件或目录
33.ShowLog->Create branch/tag from revison:从选中的版本建立一个分支/标记。
34.ShowLog->Update item to revision:将你的工作副本更新到选中的版本。
35.ShowLog->Revert changes from this revision:还原选中版本所做的修改。还原内容只在你的工作副本中,提交前不会影响版本库。
36.ShowLog->Revert to this revision:还原到选中版本,还原内容只在你的工作副本中,提交前不会影响版本库。
37.ShowLog->merge revison to :选中合并版本到指定路径。
38.ShowLog->Checkout:提取指定版本内容确认URL和版本到指定路径保存。
39.ShowLog->Export导出指定版本内容确认URL和版本到指定路径保存。
40.ShowLog->Edit author/log message:编辑之前提交时的日志信息或者是作者
41.ShowLog->Show revision properties:查看和编辑任何版本属性,不仅仅是日志信息和作者。
42.ShowLog->Copy to clipboard :指定版本复制到剪切板
43.ShowLog->Search log messages:在指定版本中查找内容。
(四)冲突产生的原因:
两个开放人员同时提取某文件,并且同时修改了同一地方。后提交的一方在拷贝副本中产生冲突。(提交版本前最好先更新版本)
(五)当产生冲突时,SVN会生成三个临时的文件
1.filename.mine储存本地修改过的文件
2.filename.rOLDREV储存上次update的基础版本文件
3.filename.rNEWREV储存客户端刚从服务器上接收来的版本
(六)解决冲突的3种方法
1.手动合并代码,解决冲突
2.选择一个冲突出现时产生的临时文件夹来覆盖当前文件。
3.运行SVN resolved filename命令来放弃当前文件的本地的所有修改。
解决完冲突问题后你要告诉SVN你已经解决了冲突,SVN会去删除这3个临时文件。