win10之Subversion(SVN)基本操作
一、环境说明
1.操作系统:window10家庭中文版
2.Subversion安装包:Setup-Subversion-1.8.17.msi
二、安装Subversion
1.双击Setup-Subversion-1.8.17.msi安装即可
PS:安装位置不要有中文、空格等非法字符
2.设置环境变量
将Subversion根目录下的bin目录添加至系统环境变量(过程略)
3.查看svn版本
svn --version
三、Subversion基本操作
1.配置版本库
- 这里小编将D:\MyUtil\Test\Subversion规定为根目录,下面放这许多版本库。这里创建两个版本库one、two
- 实验所用到的路径可自定义,但不要有中文、空格等非法字符
- 在cmd命令行操作
创建one版本库:
svnadmin create D:\MyUtil\Test\Subversion\one
创建two版本库:
svnadmin create D:\MyUtil\Test\Subversion\two
查看结果(以one为例,two同理)
文件说明:
2.启动服务器端程序
svnserve -d -r D:\MyUtil\Test\Subversion
命令解释:
- svnserve:主命令
- -d:表示后台进行
- -r:表示版本库目录
- D:\MyUtil\Test\Subversion svn仓库根目录
PS:运行命令后,不能关闭cmd窗口
3.检出
命令格式:svn checkout svn://SVN 服务器主机地址/具体仓库目录 保存检出内容的目录
svn checkout svn://localhost/one D:\MyUtil\Test\Subversion\three
PS:这里小编把保存检出内容的目录以绝对路径写出,如果上述命令只写three,是在cmd命令所在的目录下检出one仓库为three目录
4.提交
(1)开启匿名访问权限
- 检出的仓库如果匿名提交,要先在源仓库(three的源仓库是one)里修改下配置文件,开放匿名访问权限
- 打开仓库根目录/conf/svnserve.conf文件
- 将第 19 行的# anon-access = read 改为 anon-access = write,也就是去掉“# ”。注意前面不要留空格,一定要顶格写。
(2)现在自己检出的three仓库内创建一个文本文件,随便写点东西
(3)执行 svn add 命令,将 test.txt 纳入版本控制
svn add test.txt
PS:
- 执行命令前,命令行要进入到three目录(即工作副本)下
- Windows10在cmd进入一个目录的快捷方式:打开那个目录,在上面地址栏输入“cmd”,回车即可
(4)执行提交命令
svn commit -m "My first commit" test.txt
- commit:svn提交命令
- -m:添加描述信息
- test.txt:添加的文件
5.更新
(1)新检出一个three2目录
svn checkout svn://localhost/one D:\MyUtil\Test\Subversion\three2
(2)cmd进入到three2文件目录里,在three2仓库里修改test.txt文件,并且重新提交
重新提交
svn commit -m "My second commit" test.txt
(3)执行更新操作
svn update
(4)cmd回到three目录,执行更新操作,可以获得最新版本
6.工作副本中文件的集中状态
①没有修改,现行版本
本档案在工作目录中没有被修改,而且自当前版本之后,其他终端也没有任何该
文件的修改被提交到服务器,即当前工作副本的版本和服务器端最新版本是一致
的。对它执行 svn commit 和 svn update 都不会发生任何事。
②本地修改, 现行版本
这个文件被修改过,但这个修改还没有提交到服务器,而且自当前版本之后,其
他终端也没有任何该文件的修改被提交到服务器,所以当前工作副本的版本和服
务器端最新版本仍然是一致的。由于有尚未送交回去的本地修改,所以对它的
svn commit 会成功提交你的修改,而 svn update 则不会作任何事。
③没有修改,过时版本
这个文件没有修改,但是版本库中有其他终端提交的修改。此时当前工作副本的
版本比服务器端的版本落后了,我们称之为“过时”。对当前文件的 svn commit 不
会发生任何事,而 svn update 会让工作目录中的文件更新至最新版本。
④本地修改,过时版本
服务器端存在没有更新到本地的修改,导致当前版本过时。如果这个文件在
本地有未提交的修改,则无法提交,对它执行 svn commit 会产生“out-of-date”
错误。
此时应该先尝试更新本地文件。更新时 SVN 会尝试将服务器端的更新与本地
文件进行合并,合并的结果有两种可能:一个是服务器端和本地修改位于文件的
不同位置,合并成功;另一个是服务器端的修改正好和本地修改位于同一个位置,
发生冲突。
7.恢复历史版本
将工作副本整体回复到某一个历史版本命令
svn update --revision 版本号
四、权限设置
1.单一版本库权限配置
1.1匿名访问,上述已提及,不再阐述
1.2授权访问
思想:创建用户,然后为用户设定权限
打开要设置权限的仓库的根目录\conf\svnserve.conf文件(要全新的svnserve.conf文件)
- 将第 19 行# auth-access = write 注释打开,设置匿名用户操作为none
- 将第 20 行# auth-access = write 注释打开:auth-access = write,表明该版本库不接受匿名访问
- 将第 27 行注释打开:password-db = passwd,表明使用同目录下的 passwd 文件保存用户信息
- 将第 34 行注释打开:authz-db = authz,表明使用同目录下的 authz 文件保存权限信息
1.3 打开 passwd 文件创建用户
userWrite01 = 123456
userWrite02 = 123456
userRead = 123456
userOther = 123456
表示新建4个用户,密码都是123456
1.4 打开 authz 文件,设置用户权限
在这文件可以设置用户组和用户组或者用户的目录权限
新增用户组:
canWrite = userWrite01,userWrite02
这表示创建用户组canWrite,组里有用户userWrite01、userWrite02
设置版本库路径权限:
[/]
@canWrite = rw
userRead = r
* =
表示版本库根路径下,canWrite用户组的用户有读写权限,userRead用户有读权限,其他用户没有任何权限
设置版本库下/subDir目录权限:
[/subDir]
userOther = rw
* =
表示当前版本库下的 subDir 目录只有 userOther 有读写权限,其它用户无任何权限
PS:父目录设置的权限,对子目录同样有效——除非子目录进行了更为具体的设定,如上面的[/subDir]目录权限比[/]目录更具体
2.多版本库共享配置
2.1 在版本库根目录 D:\MyUtil\Test\Subversion下创建 commConf 目录
2.2 将未修改的 authz 和 passwd 文件拷贝到 commConf 目录下
2.3 修改需要设置权限的版本库的 svnserve.conf 文件
- 将第 20 行# auth-access = write 注释打开:auth-access = write,表明该版本库不接受匿名访问
- 将第 27 行注释打开:password-db = passwd,这里使用绝对路径,表明使用commConf目录下的 passwd 文件保存用户信息
- 将第 36 行注释打开:authz-db = authz,这里使用绝对路径,表明使用commConf目录下的 authz 文件保存权限信息
2.4 在password 中创建用户
userone = 123456
usertwo = 123456
2.5 在 authz 中针对不同版本库为不同用户授予权限
[one:/]
userone = rw
* =
[two:/]
usertwo = rw
* =
表示userone用户在one的版本库下有读写权限,其他用户没有权限,usertwo同理。
五、删除保存的认证数据(借助TortoiseSVN)
1.右键–》“TortoiseSVN”–》“设置”
2.进入“已保存数据”
3.勾选要删除的数据即可