Linux中利用Subversion进行版本控制
这篇文档记录了在Linux(有些同样适合于Windows)中SVN使用,配置,关于SVN,对于管理文档,进程程序的版本控制非常优秀,但是,基于命令的方式,总是会让人遗忘。所以本篇就把平时或将来常会用到的,记录一下,也当作一份备忘。
Code
一、开始工作:
首先要做的就是在系统中加入一个中心版本库,然后,使用svnserve作为svn的服务运行。修正相应的配置文件后,就可以开始真正的工作了。
具体的示例命令如下:
对于配置文件,需要修改的就是/usr/SVN/svnDic/conf/svnserve.conf , passwd, authz.
svnserver.conf描述了svnserver的一些配置选项,包括所有认证和授权政策。
passwd描述了允许登录的用户及用户密码
authz描述了认证选项。
具体的参数设定就不累述了,可以参照《使用Subversion进行版本控制》这本书,里面写得非常详细。
我的配置文件如下所示,当然,为了简便,就没多考虑安全了。对于安全性要求比较高的场合,需要更细致的设定。
svnserve.conf
[general]
anon-access = read
auth-access = write
password-db = passwd
authz-db = authz
passwd
[users]
shipfi = ******
authz
[groups]
[/]
* = rw
二、具体初步操作
(1) 导入数据到版本库
$svn import /tmp/MyProject/ svn://192.168.1.1/Source/MyProject -m "initial import"
# 拷贝用户的一个未被版本化的目录树到版本库最快的方法
(2) 列出库中的目录&文件
$svn list svn://192.168.1.1/ -R # -R选项表示recursive
(3) checkout
$svn co svn://192.168.1.1/ ./ #当然,后面也可以指定相应的目录
(4) checkin
一个典型的checkin操作就像这样:
$svn ci <filename> -m "eui-64.c" --force-log #其中,更新的filename是可选的,不过,我大部分都会指定相应文件。避免上传不需要checkin的文件。
三、记住svn的四个状态。才能理解为什么有时候commit,update操作进行不了。
![](/Images/OutliningIndicators/ContractedBlock.gif)
一、开始工作:
首先要做的就是在系统中加入一个中心版本库,然后,使用svnserve作为svn的服务运行。修正相应的配置文件后,就可以开始真正的工作了。
具体的示例命令如下:
1
$ svnadmin create /usr/SVN/svnDic/ # /usr/SVN/svnDic/作为SVN的中心版本库
2
$ svnserve -d -r /usr/SVN/svnDic/ # svnserve的第二个选项是作为独立“守护”进程,为此要使用-d选项.
3
# 以上,也可以加上--listen-port=和--listen-host=选项来自定义“绑定”的端口和主机名,具体的可以看svnserve -h
4
# 我会把svnserve的命令调用加入到/etc/rc.local中,以便主机启动后就调用该服务
![](/Images/OutliningIndicators/None.gif)
2
![](/Images/OutliningIndicators/None.gif)
3
![](/Images/OutliningIndicators/None.gif)
4
![](/Images/OutliningIndicators/None.gif)
对于配置文件,需要修改的就是/usr/SVN/svnDic/conf/svnserve.conf , passwd, authz.
svnserver.conf描述了svnserver的一些配置选项,包括所有认证和授权政策。
passwd描述了允许登录的用户及用户密码
authz描述了认证选项。
具体的参数设定就不累述了,可以参照《使用Subversion进行版本控制》这本书,里面写得非常详细。
我的配置文件如下所示,当然,为了简便,就没多考虑安全了。对于安全性要求比较高的场合,需要更细致的设定。
svnserve.conf
[general]
anon-access = read
auth-access = write
password-db = passwd
authz-db = authz
passwd
[users]
shipfi = ******
authz
[groups]
[/]
* = rw
二、具体初步操作
(1) 导入数据到版本库
$svn import /tmp/MyProject/ svn://192.168.1.1/Source/MyProject -m "initial import"
# 拷贝用户的一个未被版本化的目录树到版本库最快的方法
(2) 列出库中的目录&文件
$svn list svn://192.168.1.1/ -R # -R选项表示recursive
(3) checkout
$svn co svn://192.168.1.1/ ./ #当然,后面也可以指定相应的目录
(4) checkin
一个典型的checkin操作就像这样:
$svn ci <filename> -m "eui-64.c" --force-log #其中,更新的filename是可选的,不过,我大部分都会指定相应文件。避免上传不需要checkin的文件。
三、记住svn的四个状态。才能理解为什么有时候commit,update操作进行不了。
- 1.未修改且是当前的:
- 文件在工作目录里没有修改,在工作修订版本之后没有修改提交到版本库。svn commit操作不做任何事情,svn update不做任何事情。
- 2.本地已修改且是当前的
- 在工作目录已经修改,从基本修订版本之后没有修改提交到版本库。本地修改没有提交,因此svn commit会成功的提交,svn update不做任何事情。
- 3.未修改且不是当前的了
- 这个文件在工作目录没有修改,但在版本库中已经修改了。这个文件最终将更新到最新版本,成为当时的公共修订版本。svn commit不做任何事情,svn update将会取得最新的版本到工作拷贝。
- 4.本地已修改且不是最新的
- 这个文件在工作目录和版本库都得到修改。一个svn commit将会失败,这个文件必须首先更新,svn update命令会合并公共和本地修改,如果Subversion不可以自动完成,将会让用户解决冲突。