Linux中利用Subversion进行版本控制

       这篇文档记录了在Linux(有些同样适合于Windows)中SVN使用,配置,关于SVN,对于管理文档,进程程序的版本控制非常优秀,但是,基于命令的方式,总是会让人遗忘。所以本篇就把平时或将来常会用到的,记录一下,也当作一份备忘。
Code

一、开始工作:
   首先要做的就是在系统中加入一个中心版本库,然后,使用svnserve作为svn的服务运行。修正相应的配置文件后,就可以开始真正的工作了。
   具体的示例命令如下:

1$ svnadmin create /usr/SVN/svnDic/         # /usr/SVN/svnDic/作为SVN的中心版本库
2$ svnserve --/usr/SVN/svnDic/          # svnserve的第二个选项是作为独立“守护”进程,为此要使用-d选项.
3   # 以上,也可以加上--listen-port=和--listen-host=选项来自定义“绑定”的端口和主机名,具体的可以看svnserve -h
4   # 我会把svnserve的命令调用加入到/etc/rc.local中,以便主机启动后就调用该服务


    对于配置文件,需要修改的就是/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不可以自动完成,将会让用户解决冲突。


posted @ 2009-01-06 16:55  shipfi  阅读(1577)  评论(0编辑  收藏