笔记内容:安装svn
笔记日期:2018-01-11
- 22.1 代码管理平台介绍
- 22.2 安装svn
- 22.3 客户端上使用svn(linux)
- 22.4 客户端上使用svn(windows)
22.1 代码管理平台介绍
现在的开发工作都是由团队合作来完成开发,通常都是团队中的每个人或者每几个人完成一个模块的开发,最后再将模块拼凑起来,形成一个完整的项目,这就涉及到了协同开发。在各个模块的开发过程中,肯定会因为出现BUG或者需求更改,而进行代码的修改甚至重构的,代码每修改一次就相当于迭代了一次版本,一个完整的项目中通常会有多个模块,如果每个模块的开发过程中都会修改或重构代码,那么如果没有一个平台来管理、控制这些代码,肯定会造成代码混乱的局面。所以这时候就有了一个概念:版本控制,代码管理平台的主要功能就是进行版本的控制,以及记录代码修改、版本迭代的历史信息。
- 版本控制,记录若干文件内容变化,以便将来查阅特定版本修订情况
- 版本管理工具发展简史,cvs → svn → git 参考:http://luckypoem14.github.io/test/2012/04/24/scm-history/
- svn全称subversion,是一个开源版本控制系统,始于2000年
- git是linux创始人linus发起的,2005年发布,最初目的是更好管理linux内核代码
- git和svn不同在于:svn是集中型的,有一个中心的服务端,而git是分散型的,git不需要依赖服务端就可以工作,即git是分布式的
- 关于git和svn的比较大家 参考:http://blog.lishiming.net/?p=305
- github是基于git的在线web页面代码托管平台,公开库是免费的,而私有库则是付费服务
- gitlab可以认为是一个开源的github,两者没有直接关系
22.2 安装svn
安装命令:
yum install -y subversion
创建版本库:
代码语言:javascript复制[root@localhost ~]# mkdir -p /data/svnroot/myproject # 创建一个目录来存放工程的版本库
[root@localhost ~]# svnadmin create /data/svnroot/myproject # 创建工程的版本库
[root@localhost ~]# cd !$/conf # conf是配置文件所在的目录
cd /data/svnroot/myproject/conf
[root@localhost /data/svnroot/myproject/conf]# ls
authz passwd svnserve.conf # authz为权限配置文件,passwd为密码文件,svnserve.conf为仓库配置文件
[root@localhost /data/svnroot/myproject/conf]# vim authz # 加入以下内容
[groups] # 用户组
admins = user,user1 # 定义用户,可以定义多个
[/] # 根目录
@admins = rw # 设置该用户组的权限是可读可写
*= r # 设置所有的用户都可以读
# 可以指定对某个项目进行设置权限
#[myproject:/]
#user1 = rw # 设置user1拥有可读可写权限
[root@localhost /data/svnroot/myproject/conf]# vim passwd # 加入以下内容
[users]
user = user_^^^123
user1 = user1-***123
[root@localhost /data/svnroot/myproject/conf]# vim svnserve.conf # 加入以下内容
[general]
anon-access = none # 定义匿名用户的权限
auth-access = write # 定义用户的权限
password-db = passwd # 定义用户的密码文件
authz-db = authz # 定义用户的权限文件
realm = /data/svnroot/myproject # 定义对哪个项目生效
完成以上配置后,启动svn服务:
代码语言:javascript复制# -d指定后台启动,-r指定库所在的目录
[root@localhost /data/svnroot/myproject/conf]# svnserve -d -r /data/svnroot
[root@localhost /data/svnroot/myproject/conf]# ps aux |grep svn
root 4183 0.0 0.0 162184 656 ? Ss 23:22 0:00 svnserve -d -r /data/svnroot
root 4185 0.0 0.0 112668 972 pts/0 S 23:22 0:00 grep --color=auto svn
[root@localhost /data/svnroot/myproject/conf]# netstat -lntp |grep svn
tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN 4183/svnserve
[root@localhost /data/svnroot/myproject/conf]#
22.3 客户端上使用svn(linux)
我这里使用两台机器作为测试的客户端。
客户端也需要安装subversion:
yum install -y subversion
在客户端A中检出服务端的myproject版本库:
代码语言:javascript复制[root@localhost ~]# cd /home/
[root@localhost /home]# mkdir svntest
[root@localhost /home]# cd svntest/
[root@localhost /home/svntest]# svn checkout svn://192.168.77.130/myproject --username=user
认证领域: <svn://192.168.77.130:3690> /data/svnroot/myproject
“user”的密码: # 输入密码
-----------------------------------------------------------------------
注意! 你的密码,对于认证域:
<svn://192.168.77.130:3690> /data/svnroot/myproject
只能明文保存在磁盘上! 如果可能的话,请考虑配置你的系统,让 Subversion
可以保存加密后的密码。请参阅文档以获得详细信息。
你可以通过在“/root/.subversion/servers”中设置选项“store-plaintext-passwords”为“yes”或“no”,
来避免再次出现此警告。
-----------------------------------------------------------------------
保存未加密的密码(yes/no)?yes
取出版本 0。
[root@localhost /home/svntest]# ls
myproject
[root@localhost /home/svntest]# ll -a myproject/
总用量 0
drwxr-xr-x 3 root root 17 1月 12 00:05 .
drwxr-xr-x 3 root root 22 1月 12 00:05 ..
drwxr-xr-x 4 root root 70 1月 12 00:05 .svn # svn配置文件
[root@localhost /home/svntest]#
在客户端B中也是如上操作,就不赘述了。
在客户端B上随便拷贝个文件到检出来的版本库里,然后上传到服务端:
代码语言:javascript复制[root@localhost /home/myproject]# cp /etc/fstab .
[root@localhost /home/myproject]# ls
fstab
[root@localhost /home/myproject]# svn add ./fstab # 添加到版本控制中心
A fstab
[root@localhost /home/myproject]# svn commit -m "add fstab" # 把文件上传到服务器
正在增加 fstab
传输文件数据.
提交后的版本为 1。
[root@localhost /home/myproject]#
在客户端A上同步服务端的文件,这时就会同步刚刚客户端B上传的文件:
代码语言:javascript复制[root@localhost /home/svntest]# cd myproject/
[root@localhost /home/svntest/myproject]# ls
[root@localhost /home/svntest/myproject]# svn up # 这个命令把当前目录下的文件都更新到最新版
正在升级 '.':
A fstab
更新到版本 1。
[root@localhost /home/svntest/myproject]# ls
fstab
[root@localhost /home/svntest/myproject]#
删除本地文件:
代码语言:javascript复制[root@localhost /home/svntest/myproject]# svn delete fstab
D fstab
[root@localhost /home/svntest/myproject]#
删除服务端的文件:
代码语言:javascript复制[root@localhost /home/svntest/myproject]# svn commit -m "delete fstap"
正在删除 fstab
提交后的版本为 2。
[root@localhost /home/svntest/myproject]#
查看变更日志:
代码语言:javascript复制[root@localhost /home/svntest/myproject]# svn log
------------------------------------------------------------------------
r1 | user | 2018-01-12 00:27:06 0800 (五, 2018-01-12) | 1 行
add fstab
------------------------------------------------------------------------
[root@localhost /home/svntest/myproject]#
22.4 客户端上使用svn(windows)
在官网上下载TortoiseSVN 并安装,官网地址:
https://tortoisesvn.net/index.zh.html
由于我已经安装过了,而且windows上的操作也比较简单,我这里就不演示了,以下提供了安装的教程,以及我之前在windows上安装服务端和客户端的记录文章。
TortoiseSVN简明教程:
http://www.jianshu.com/p/6b3b7b915332
在windows上安装SVN服务端以及TortoiseSVN:
https://cloud.tencent.com/developer/article/1702573
扩展内容
svn 多仓库管理
http://elim.iteye.com/blog/1171108
svn ssh
http://www.linuxfly.org/post/450/
svn清除保存的用户名和密码
http://holy2010.blog.51cto.com/1086044/645944
svn命令详解
http://blog.sina.com.cn/s/blog_963453200101eiuq.html