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 update、svn add 、svn delete 、svn copy 、svnmove 、svn revert、svn 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)
不显示被忽略的文件
显示被忽略的文件
修改以后,刷新,显示如下