本文针对linux操作系统(使用ubuntu,centos在安装时略有不同)
如果只看客户端操作,直接跳到 5(当然需要看一下1、安装)
1、安装
sudo apt install subversion
查看是否成功:
zhj@zhj-MS:~/project$ svn --version
svn,版本 1.9.3 (r1718519)
编译于 Aug 10 2017,16:59:15 在 x86_64-pc-linux-gnu
Copyright (C) 2015 The Apache Software Foundation.
This software consists of contributions made by many people;
see the NOTICE file for more information.
Subversion is open source software, see http://subversion.apache.org/
windows和centos安装参考http://www.runoob.com/svn/svn-install.html
如果Windows只是安装客户端的话参考http://www.runoob.com/svn/tortoisesvn-intro.html
2、在服务端创建版本库
创建版本库目录:
mkdir svn/
创建版本库:
svnadmin create svn/test
此时可以看到在svn下面生成test目录,查看目录结构:
zhj@zhj-MS:~/fly/$ tree svn/test
test/
├── conf
│ ├── authz
│ ├── hooks-env.tmpl
│ ├── passwd
│ └── svnserve.conf
├── db
│ ├── current
│ ├── format
│ ├── fsfs.conf
│ ├── fs-type
│ ├── min-unpacked-rev
│ ├── revprops
│ │ └── 0
│ │ └── 0
│ ├── revs
│ │ └── 0
│ │ └── 0
│ ├── transactions
│ ├── txn-current
│ ├── txn-current-lock
│ ├── txn-protorevs
│ ├── uuid
│ └── write-lock
├── format
├── hooks
│ ├── post-commit.tmpl
│ ├── post-lock.tmpl
│ ├── post-revprop-change.tmpl
│ ├── post-unlock.tmpl
│ ├── pre-commit.tmpl
│ ├── pre-lock.tmpl
│ ├── pre-revprop-change.tmpl
│ ├── pre-unlock.tmpl
│ └── start-commit.tmpl
├── locks
│ ├── db.lock
│ └── db-logs.lock
└── README.txt
3、修改配置文件
conf目录下:
authz:负责账号权限的管理,控制账号是否读写权限
passwd:负责账号和密码的用户名单管理
svnserve.conf:svn服务器配置文件
(1)authz
在文件末尾加上:
develop = user0,user1
[/]
@develop = rw
develop是个分组,组内有两个用户。
[/]是目录,下面一行是develop对这个目录的权限
(2)passwd
在文件末尾加上:
user0 = password
user1 = password
(3)svnserve.conf
将以下两行注释去掉,并将第一行权限改为none
anon-access = none
auth-access = write
将下面这行注释去掉
password-db = passwd
将下面注释去掉
authz-db = authz
配置完成。
4、启动服务
svnserver -d -r svn/
以上都是针对服务端,下面是客户端
5、检出操作(下载代码)
即将在本地初始化,并将服务端代码下载到本地。
svn checkout svn://192.168.0.1/test
注意:将上面的ip地址改成实际IP地址
(可以在命令末尾再加上文件夹名字)
6、代码提交
进入test目录,先创建一个文件test.txt,里面写入"this is a test"。
这时候查看状态:
svn status
可以看到test.txt前面有个“?”,这是因为还没有添加,下面进行添加:
svn add test
或者直接添加某个文件夹下所有文件:
svn add *
这时候再用svn status查看,可以看到“?”变成“A”,即Add。
取消添加:
svn revert --recursive example_folder
然后可以提交了,但是在提交之前先把本地更新到最新版本:
svn update
提交:
svn commit -m "first commit"
-m是附加的提交描述,表明每次提交的内容(一定要写清楚每次提交都做了什么,方便管理)。
7、版本回退
(1)放弃对本地文件的修改
如果修改了test.txt,可以使用下面命令取消本地修改。
svn revert test.txt
如果恢复对目录的修改,需要加上-R,如:
svn revert -R trunk
(2)撤回一个已经提交的版本
svn merge -r 5:4 svn://localhost/Test
svn ci -m "roll back from r5 ot r4
即可将test.txt从版本5撤回版本4。
8、查看历史信息
-
svn log: 用来展示svn 的版本作者、日期、路径等等。
-
svn diff: 用来显示特定修改的行级详细信息。
-
svn cat: 取得在特定版本的某文件显示在当前屏幕。
-
svn list: 显示一个目录或某一版本存在的文件。
直接使用svn diff,检查和本地库缓存.svn相比改动了哪些地方;
svn diff -r 3 test.txt,检查和版本3相比,改动了哪些地方。
svn diff -r 2:3 test.txt,检查版本2和版本3的改动。
svn diff --summarize -r 2:3 查看两个版本改动的文件名
具体参考:http://www.runoob.com/svn/svn-show-history.html
9、分支,标签
分支和标签实际上是有相同的权限,但一般操作上可以在分支上修改,但不在标签上修改,标签作为开发过程中一个固定版本。
创建一个分组(前提是服务端已经有trunk和branches目录):
svn copy trunk/ branches/my_branch -m "create my branch"
即将trunk(主干)代码复制一份到branches(分支)中。
在分支开发一定阶段后,可以合并到trunk中。先将修改都提交到分支中,然后切换到本地trunk目录,执行:
svn merge ../branches/my_branch/
然后在trunk中提交即可。
10、其他命令
svn delete 文件名 (与add相反)
svn ci -m “删除备注信息文本”(提交变动)
参考https://segmentfault.com/a/1190000000596975