SVN是Subversion的简称,是一个开放源代码的版本控制系统,它采用了分支管理系统,设计目的就是取代CVS。
SVN是ASF(阿帕奇软件基金会)旗下的一款开源产品:
集中式代理管理的核心是服务器,所有开发者在开始新的一天的工作之前必须从服务器获取代码,然后开发,最后解决冲突,提交。
所有的版本信息都放在服务器上,如果脱离的服务器,开发者基本上是无法工作的。
经典的SVN工作流程:
在一台服务器上建立一个源代码库,库里可以存放许多不同项目的源程序,由源代码管理员统一管理这些源程序。
每个用户在使用源代码库之前,首先要把源代码库里的项目文件下载到本地,然后开发人员可以在本地修改,然后用svn命令进行提交,由源代码库统一管理修改。
mkdir /webdept # 存放版本库的主目录
// 再创建两个版本库
svnadmin create /webdept/www.hgzerowzh.com
svnadmin create /webdept/my.hgzerowzh.com
// 查看版本库
ls /webdept/www.hgzerowzh.com/
svnserve.conf 文件:
[general]
anon-access = read # 设置匿名用户可以读,使用none的话就是匿名用户不可以访问
auth-access = write # 认证用户可以写,可以是read,write,none
password-db = passwd # 密码库文件,默认使用的是同一目录下的passwd文件作为用户密码库
authz-db = authz # 认证权限文件
realm = hgzerowzh.com # 登陆提示信息
# 注意:此配置文件的所有内容必须顶格,否则会报错
passwd 文件:
[users]
shit = shitpass
hehe = hehepass
tom = tompass
# 直接设置用户和密码即可
# 这里的密码都是明文,没有加密
authz 文件:
[groups] # 用户组设置
Check = shit,hehe # 定义组,和组中的成员,成员之间用逗号隔开,用户名必须是在passwd中存在的
[/] # /表示当前所在版本库目录,这里代表www.hgzerowzh.com
top = rw # 定义tom这个用户的权限
@Check = r # @Check表示这个组的权限,就是上面定义的组的成员
*= # 除了上面的有赋予权限成员之外,其他的成员都没有权限
//SVN目录格式:
// [/目录名]
// @用户组名 =权限
// 用户名 =权限
// *=
直接启动所有版本库,也可以选择启动指定的库
svnserve -d -r /webdept/
# -d 表示以daemon方式工作
# -r 表示指定工作根目录,启动所有的版本库
// 如果只需要启动某一个版本库,可以写成 -r /webdept/www.hgzerowzh.com
// 这样就表示只启动www.hgzerowzh.com这个版本库了
import:将未版本化的文件纳入版本控制并提交
checkout:从版本库中检出一个修订版
update:更新工作拷贝
add,delete,copy,move:增、删、复制、移动文件或目录
status:检查状态差异
diff:检查文件行级详细差异
revert:恢复
resolve:解决冲突
switch:切换工作拷贝对应的版本库分支
log:查看历史记录
list:显示文件目录
cat:查看某个文件内容
[root@c7_node_03 ~]# mkdir work
[root@c7_node_03 ~]# cd work/
[root@c7_node_03 work]# touch 1.html 2.html
[root@c7_node_03 work]# cd
[root@c7_node_03 ~]# svn import /root/work/ file:///webdept/www.hgzerowzh.com/ -m "first edit"
Adding work/1.html
Adding work/2.html
Committed revision 1.
# 使用file,仅能在服务器本地导入
# -m 添加的注释,message
# 首次加入代码使用import选项,将未版本化的文件纳入版本控制并提交
checkout 导出获得文件后,导出的文件仍处于SVN版本控制中,与版本库保持关联,比如可以进行svn update 或者 svn commit操作,checkout是第一次用,后面的用法就是更新。
svn checkout svn://10.0.0.203/www.hgzerowzh.com/ down_source
# checkout表示从版本库检出一个修订版,这里的down_source如果本地不存在则会自动创建
// 之后输入用户名和密码即可
// 在本地down_source目录中添加一些新文件
cd down_source
touch 3.html
echo shit >> 3.html
// 将新内容添加到SVN服务,并提交
svn add 3.html
svn commit -m "second edit"
vim /etc/httpd/conf.d/subversion.conf
<Location /webdept>
DAV svn # 使用SVN模块
SVNParentPath /webdept # SVN的根目录
AuthType Basic # Basic的认证方式
AuthName "www.hgzerowzh.com website" # 认证提示信息
AuthUserFile /webdept/svn/passwd # 用户密码文件
AuthzSVNAccessFile /webdept/svn/authz # 访问控制权限文件
Require valid-user # 合法用户才能访问
</Location>
[root@c7_node_03 ~]# cd /webdept/
[root@c7_node_03 webdept]# mkdir svn
// 创建两个用户并设置密码
[root@c7_node_03 webdept]# htpasswd -c -m /webdept/svn/passwd hguser
New password:
Re-type new password:
Adding password for user hguser
[root@c7_node_03 webdept]# htpasswd -b -m /webdept/svn/passwd hguser2 hgzero2
Adding password for user hguser2
[root@c7_node_03 webdept]# cat /webdept/svn/passwd
hguser:$apr1$N025THp3$Qyvk75AplROVFu53fnldm/
hguser2:$apr1$q0qNVtcm$u6EHKtd6vJmC0/fJVj7XN/
vim /webdept/svn/authz
[groups]
all = hguser,hguser2
[/] # 表示所有仓库的根目录下
#hgzero1 = rw
[www.hgzerowzh.com:/] # 表示www.hgzerowzh.com这个仓库所有用户都可读写
@all = rw
[my.hgzerowzh.com:/]
hguser = rw
hguser2 = rw
没什么好说的,大致流程如下
checkout --> 修改 --> add --> commit
原文:https://www.cnblogs.com/hgzero/p/12890928.html