SVN代码管理器的使用

时间:2021-04-01 00:19:36

SVN 是什么

Subversion是一个*/开源的版本控制系统。Subversion允许你数据恢复到早期版本,或者是检查数据修改的历史。

 

Subversion的版本库可以通过网络访问,从而使用户可以在不同的电脑上进行操作。从某种程 度上来说,允许用户在各自的空间里修改和管理同一组数据可以促进团队协作。因为修改不 再是单线进行,开发速度会更快。

 

此外,由于所有的工作都已版本化,也就不必担心由于错 误的更改而影响软件质量—如果出现不正确的更改,只要撤销那

 一次更改操作即可。

 

Subversion是一个通用系统,可以管理任何类型的 文件集。对你来说,这些文件这可能是源程序—而对别人,则可能是一个货物清单或者是数 字电影。

 

1、   svn 原理的简单介绍

Subversion 的架构



图中的一端是保存所有版本数据的Subversion版本库,另一端是Subvesion的客户程序,管理 着所有版本数据的本地影射(称为“工作拷贝”),在这两极之间是各种各样的版本库访问 (RA)层,某些使用电脑网络通过网络服务器访问版本库,某些则绕过网络服务器直接访问版 本库

 

Subversion基本概念及其独特理念

版本库

版本库以典型的文件和目录结构形式文件系统树来保存信息。任意数量的客户端连 接到Subversion版本库,读取、修改这些文件。客户端通过写数据将信息分享给其他人,通过 读取数据获取别人共享的信息。

一个典型的客户/服务器系统

 

Subversion版本库的特别之处在于,它会记录每一次改变:每个文件的改变,甚至是目 录树本身的改变,例如文件和目录的添加、删除和重新组织

 

 

 

文件共享的问题

怎样让系统允许用户共享信息,而不会让他们因意外而互相干扰?

需要避免的问题: 对同一文件的修改做简单的覆盖操作

 

 

 

 “锁定-修改-解锁”方案

锁定-修改-解锁模型有一点问题就是限制太多

•    锁定可能导致管理问题。

有时候Harry会锁住文件然后忘了此事,这就是说Sally一直等待解 锁来编辑这些文件,她在这里僵住了。然后Harry去旅行了,现在Sally只好去找管理员放开 锁,这种情况会导致不必要的耽搁和时间浪费

•    锁定可能导致不必要的线性化开发。

如果Harry编辑一个文件的开始,Sally想编辑同一个 文件的结尾,这种修改不会冲突,设想修改可以正确的合并到一起,他们可以轻松的并行 工作而没有太多的坏处,没有必要让他们轮流工作

 

•    锁定可能导致错误的安全状态。

假设Harry锁定和编辑一个文件A,同时Sally锁定并编辑文 件B,如果A和B互相依赖,这种变化是必须同时作的,这样A和B不能正确的工作了,锁定 机制对防止此类问题将无能为力—从而产生了一种处于安全状态的假相。很容易想象Harry和Sally都以为自己锁住了文件,而且从一个安全,孤立的情况开始工作,因而没有尽早发 现他们不匹配的修改。锁定经常成为真正交流的替代品

 

“拷贝-修改-合并”方案

“拷贝-修改-合并”方案(续)

修改交迭(冲突)了该怎么办?  

一对冲突的修改集,并手工的选择保留一组修改

软件不 能自动的解决冲突,只有人可以理解并作出智能的选择

手工的解决了冲突,可以安全的把合并的文件保存到版本库

 

 

版本库的 URL

Subversion使用URL来识别Subversion版本库中的版本化资

源,通常情况下,这些URL使用标准的语法,允许服务器名称和端口作为URL的一部分

 

 

 

 

2、   svn 在mac 平台主要的工具

 

SVN 命令行

使用终端执行svn 命令

一些常用的命令

svn checkout、svn updatesvn add svn delete svn copy svnmove svn revertsvn commit、… …

 

如果有兴趣可以参考:SVN-1.5-中文教程.pdf

 

 

 

 

 

 

 

 

Versions

 

 

SmartSvn

 

 

下面主要讲 Versions 的使用

 

 

3、   Version的安装,破解版下载

 

下载地址:http://soft.macx.cn/soft4153.htm

 

4、   Version 工具的大致介绍

 

界面的大致介绍

 

 

   文件的各种状态介绍

unversioned(无版本)

   

 

add file(新添加的文件)

 

modify(修改的文件)

 

delete(删除的文件)

 

Missing(丢失的文件)

 

Ignored(忽略的文件)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5、Versions 的使用

  

链接SVN服务器

 

点击New Repository Bookmark

 

在弹出的框中完成以下输入:

 

 

 

 

点击create后出现如下结果

 

 

 

 

创建Folder

右击Browse文件目录中的某个item,此处右击 ios1403

 

输入新增的 文件夹名称,点击确定

弹出commit内容,点击commit

 

完成之后,查看添加结果:

 

 

 

 

 

 

 

Import :导入本地的文件目录到文件服务器中

选中刚创建的文件夹,将本地文件导入到服务器

 

 

 

弹出的框中,打开文件选择框

 

选中指定目录文件

 

选择导入目录,点击import

 

 

 

 

 

 

 

 

弹出的 commit 框,根据需要输入一些描述信息,点击commit

 

查看import的结果:

 

 

 

 

 

 

 

 

 

Export:导出服务器中的某个文件块

 

右击需要导出的某个 item,点击export

填写导出的路径,点击Export

 

 

 

 

查看导出的结果

 

 

CheckOut

选中 服务端文件体系中的某个文件夹,点击左上方的 Checkout

选择CheckOut的目录,确定本地索引名,点击CheckOut

查看CheckOut的结果

 

 

 

 

 

 

 

 

 

 

 

 

Update 和 update to Rversion

选中某个item ,点击update

 

右击某个item,点击 update “XX” to Revision

 

 

 

 

 

 

 

进入 历史版本 的选择界面,点击select,即更新到指定版本

 

Commit:

commit之前最好先update

选择本地文件目录中的某个item

 

 

 

 

 

 

或者 右击某个需要commit的item

进入commit界面,再次验证,点击commit

 

Local Changes:本地修改的内容

选中有修改的item,Local Changes变为可点状态

点击LocalChanges,弹出 具体修改的内容

 

 

 

 

Igonre和cancel  Igonre :忽略和取消忽略

 

默认忽略的文件后缀:

*.o *.lo *.la *.al .libs *.so *.so.[0-9]* *.a *.pyc *.pyo *.rej *~ #*# .#*.*.swp .DS_Store.

 

项目中可能需要用到.a,所以需要将忽略的 *.a文件添加到项目中,一般有三种解决办法

1、需要修改Igonre的全局配置(推荐使用此方法,参考附录1)

2、使用SVN add命令:SVNadd  路径/test.a 即可

3、使用versions客户端,显示被忽略的文件,add(下面会讲到)

 

 

注意只有 unversioned才可以 做ignore

右击某个unversioned的item,点击Ignore “XX”

 

对于ignore 文件的恢复

显示ignore 文件:选中工具栏中的View-->Show Ignored Items

点击右上角add(或者右击Ignore的Item,弹出的add选项),重新加入版本控制中

 

  

 Revert和Revert to Rversion:还原、恢复

选择需要revert的Item,点击revert

 

 

 

 

 

 

将某个Item恢复到某个版本

 

选中某个历史版本,点击select,则还原至选中的那个版本


 

附录1:

Using Global Ignores:配置全局忽略的文件

打开Finder,快捷键:command+ shift + g:弹出前往文件夹,

输入~/.subversion/,点击前往

 

 

使用文本编辑器打开config 文件:

 

查找global-ignores,找到如下项

删除 *.a,移除前面的‘#‘注释符,保存

 

 

 

 

回到Versions,刷新(cmd + r

 

不显示被忽略的文件

 

显示被忽略的文件

 

 

 

 

修改以后,刷新,显示如下