本档案在工作目录中没有被修改,而且自当前版本之后,其他终端也没有任何该文件的修改被提交到服务器,即当前工作副本的版本和服务器端最新版本是一致的。对它执行svn commit和svn update都不会发生任何事。
②本地修改, 现行版本
这个文件被修改过,但这个修改还没有提交到服务器,而且自当前版本之后,其他终端也没有任何该文件的修改被提交到服务器,所以当前工作副本的版本和服务器端最新版本仍然是一致的。由于有尚未送交回去的本地修改,所以对它的 svn commit会成功提交你的修改,而 svn update 则不会作任何事。
③没有修改,过时版本
这个文件没有修改,但是版本库中有其他终端提交的修改。此时当前工作副本的版本比服务器端的版本落后了,我们称之为“过时”。对当前文件的 svn commit 不会发生任何事,而 svn update 会让工作目录中的文件更新至最新版本。
④本地修改,过时版本
服务器端存在没有更新到本地的修改,导致当前版本过时。如果这个文件在本地有未提交的修改,则无法提交,对它执行svn commit 会产生“out-of-date”错误。
此时应该先尝试更新本地文件。更新时SVN会尝试将服务器端的更新与本地文件进行合并,合并的结果有两种可能:一个是服务器端和本地修改位于文件的不同位置,合并成功;另一个是服务器端的修改正好和本地修改位于同一个位置,发生冲突。
3.5 将工作副本整体回复到某一个历史版本
①假设当前版本为12,想要取回版本9
②执行svn update命令
格式
svn update --revision 想要取回的版本号
举例
svn update --revision 1
运行结果
正在升级 \'.\':
D pp.txt
U test.txt
更新到版本 1。
③这里需要注意的是,SVN版本号并不是对某一个文件进行编号,而是对应整个版本库总体状态的一个“快照”,取回某个版本不是取回版本号对应的某个文件,而是整个项目的一个快照。
3.6 将某个文件恢复到某个版本中的状态,同时不涉及其他文件
①假设想要取回pp.txt在版本10时的状态
②执行svn update命令
格式
svn update 文件名 --revision 想要取回的版本号
举例
svn update pp.txt –revision 10
运行结果
正在升级 \'pp.txt\':
U pp.txt
更新到版本 10。
③综合这两个例子,我们可以认为版本号和文件名构成了一个横纵坐标系,通过文件路径和版本号定位其在某一个时刻的状态。
4 单一版本库权限配置
4.1 匿名访问:前已述及。
4.2 授权访问
①要设置授权访问就需要创建用户,并为用户设定权限
②打开授权访问的配置
[1]打开D:\DevRepository\Subversion\ERP\conf\svnserve.conf
[2]将第19行anon-access = write注释掉:# anon-access = write
表明该版本库不接受匿名访问
[3]将第20行# auth-access = write注释打开:auth-access = write
表明该版本库使用授权访问
[4]将第27行注释打开:password-db = passwd
表明使用同目录下的passwd文件保存用户信息
[5]将第36行注释打开:authz-db = authz
表明使用同目录下的authz文件保存权限信息
[6]打开passwd文件创建用户
userWrite01 = 123456
userWrite02 = 123456
userRead = 123456
userOther = 123456
[7]打开authz文件:#后面注释的是例子
<1>创建用户组
[groups]
# harry_and_sally = harry,sally
# harry_sally_and_joe = harry,sally,&joe
canWrite = userWrite01,userWrite02
<2>指定路径,给用户和用户组授权
# [/foo/bar]
# harry = rw
# &joe = r
# * =屏蔽那些未设定的用户,让它们没有任何权限
[/]
@canWrite = rw
userRead = r
* =
<3>权限的继承性:父目录设置的权限,对子目录同样有效——除非子目录进行了更为具体的设定
[/subDir]
userOther = rw
* =
这个例子表示当前版本库下的subDir目录只有userOther有读写权限,其它用户无任何权限
5 多版本库共享配置
5.1 在版本库根目录D:\DevRepository\Subversion下创建commConf目录
5.2 将未修改的authz和passwd文件拷贝到commConf目录下
5.3 修改需要设置权限的版本库的svnserve.conf文件
①password-db = ../../commConf/passwd
②authz-db = ../../commConf/authz
5.4 在password中创建用户
[users]
# harry = harryssecret
# sally = sallyssecret
userERP = 123456
userOA = 123456
userCRM = 123456
5.5 在authz中针对不同版本库为不同用户授予权限
# [repository:/baz/fuz]
# @harry_and_sally = rw
# * = r
[ERP:/]
userERP = rw
* =
[OA:/]
userOA = rw
* =
[CRM:/]
userCRM = rw
* =
6 查看工作副本信息
①使用svn info命令
②执行效果如下
D:\DevWorkSpace\SVNSpace\MyCRM>svn info
路径: .
工作副本根目录: D:\DevWorkSpace\SVNSpace\MyCRM
URL: svn://localhost/CRM
正确的相对 URL: ^/
版本库根: svn://localhost/CRM
版本库 UUID: d5768329-0587-f54a-b44e-72a9a02ddf1b
版本: 12
节点种类: 目录
调度: 正常
最后修改的作者: userCRM
最后修改的版本: 12
最后修改的时间: 2014-08-08 00:30:38 +0800 (周五, 2014-08-08)
③对某一个文件使用svn info命令
D:\DevWorkSpace\SVNSpace\MyCRM\src\com\crm>svn info MyCRM.java
路径: MyCRM.java
名称: MyCRM.java
工作副本根目录: D:\DevWorkSpace\SVNSpace\MyCRM
URL: svn://localhost/CRM/src/com/crm/MyCRM.java
正确的相对 URL: ^/src/com/crm/MyCRM.java
版本库根: svn://localhost/CRM
版本库 UUID: d5768329-0587-f54a-b44e-72a9a02ddf1b
版本: 14
节点种类: 文件
调度: 正常
最后修改的作者: userCRM
最后修改的版本: 14
最后修改的时间: 2014-08-08 00:36:06 +0800 (周五, 2014-08-08)
文本最后更新: 2014-08-08 00:35:59 +0800 (周五, 2014-08-08)
校验和: dbea85a617fb59cb739c3d18968a941d32858372
7 查看目录或文件日志信息
①使用svn log命令
[注意:使用这个命令的前提是设置匿名访问为none,即:anon-access = none,否则会出现“svn: E220001: 条目不可读”错误]
②执行效果如下
D:\DevWorkSpace\SVNSpace\MyCRM\src\com\crm>svn log MyCRM.java
------------------------------------------------------------------------
r18 | userCRM | 2014-08-08 09:43:00 +0800 (周五, 2014-08-08) | 4 行
aaa
bbb
ccc
ddd
------------------------------------------------------------------------
r17 | userCRM | 2014-08-08 09:36:46 +0800 (周五, 2014-08-08) | 1 行
aaaa\nbbb\ntt
------------------------------------------------------------------------
r16 | userCRM | 2014-08-08 09:30:26 +0800 (周五, 2014-08-08) | 1 行
------------------------------------------------------------------------
r15 | userCRM | 2014-08-08 00:58:30 +0800 (周五, 2014-08-08) | 1 行
------------------------------------------------------------------------
r14 | userCRM | 2014-08-08 00:36:06 +0800 (周五, 2014-08-08) | 1 行
tt
------------------------------------------------------------------------
r13 | userCRM | 2014-08-08 00:33:12 +0800 (周五, 2014-08-08) | 1 行
tt
------------------------------------------------------------------------
r4 | userCRM | 2014-08-07 22:19:16 +0800 (周四, 2014-08-07) | 1 行
------------------------------------------------------------------------
r2 | (没有作者信息) | 2014-08-05 11:37:29 +0800 (周二, 2014-08-05) | 1 行
tt
------------------------------------------------------------------------
r1 | (没有作者信息) | 2014-08-05 11:34:40 +0800 (周二, 2014-08-05) | 1 行
tt
------------------------------------------------------------------------
8 在Eclipse中安装SVN客户端插件
8.1 Eclipse插件应用市场
在Eclipse中访问Eclipse Marketplace Client可以搜索Subversion,下载插件,按提示安装即可。
8.2 使用压缩包
如果不能联网可以使用下载好的插件压缩包eclipse_svn_site-1.10.5.zip,这个压缩包是从网站(subclipse是这款Eclipse插件的名称)上下载的。安装方法是:
①解压eclipse_svn_site-1.10.5.zip中的features和plugins这两个目录
②将features和plugins复制到Eclipse安装目录/dropins/eclipse_svn_site-1.10.5下
③重启Eclipse
④进入Eclipse依次打开Window→Preferences→Team→SVN,看到如下界面即说明SVN插件安装成功
8.3 创建资源库位置
①切换到透视图SVN资源库研究
②创建资源库位置
此时可以查看版本库中的文件及目录结构
8.4 检出
①检出分两种情况
<1>从服务器端获取到的是一些零散的文件,不能作为项目检出
此时会弹出一个新建项目向导,之所以会这样是因为我们需要创建一个项目来保存从服务器端取回的文件
<2>从服务器端获取到的是一个完整的项目,例如
此时必须作为项目检出
项目从服务器检出后,会成为一个工作副本,根目录下会自动创建.svn隐藏目录
8.5 提交
①新创建文件后,文件图标上会以“?”标识,表示该文件尚未纳入版本控制
②在新创建的文件上点右键→Team→添加至版本控制,这样文件图标上会显示“+”,表示当前文件已纳入版本控制,但还未提交至服务器。