• svn 的常见操作 import


    0 前言
        Subversion是一个免费的开源的版本管理系统,它是作为CVS(Concurrent Versions System)的取代品出现的。本文简单介绍了Subversion在Fedora上的安装过程及其基本概念和使用方法。您可以到O'Reilly出版的 开源书籍Version Control with Subversion的主页在线阅读(中、英文版本都有),以获取更多信息。

    1 在Fedora上安装Subversion

       

    [aaronwong@localhost ~]$ sudo yum -y install subversion
    [aaronwong@localhost ~]$ rpm -ql subversion
    //上面的命令可查询subversion软件包在系统上所安装的文件列表
    [aaronwong@localhost ~]$ sudo yum -y install mod_dav_svn
    //mod_dav_svn不是必须安装的,它是Apache HTTP Server的一个插件,你本地仓库(repository)的文件必须通过它才能在网络上与别人共享。
    //subversion的组件列表点此查看。

    [aaronwong@localhost ~]$ svn --version
    svn,版本 1.4.3 (r23084)
       编译于 Mar 23 2007,09:29:55

    版权所有 (C) 2000-2007 CollabNet。
    Subversion 是开放源代码软件,请参阅 http://subversion.tigris.org/
    此产品包含由 CollabNet (http://www.Collab.Net/)开发的软件。

    可使用以下的仓库存取 (RA) 模块:

    * ra_dav : 通过WebDAV(DeltaV)协议访问仓库的模块。
      - 处理“http”方案
      - 处理“https”方案
    * ra_svn : 使用svn网络协议访问仓库的模块。
      - 处理“svn”方案
    * ra_local : 访问本地磁盘的仓库模块。
      - 处理“file”方案


    2 使用Subversion管理本地project
        作为程序开发人员,我们没有必要了解Subversion的所有特性的方方面面,我们的目的是使用它来对我们的project进行方便的简单的版本管理,因此,强烈推荐阅读Subversion Quick-Start GuidBasic Usage
        以下是笔者参照上述Guide进行一个简单的本地project的版本管理的示例。假定工程名为hello。
        (1)建立本地工程hello的subversion仓库
        Subversion把工程的各个版本的数据集中放在一个仓库(repository)中。假定我们要建立一个本地工程,叫做hello,为了使用subversion对它进行版本管理,首先要为该工程建立一个仓库。
       

    [aaronwong@localhost ~]$ svnadmin create .subversion/repos/hello
    //subversion安装后会生成一个~/.subversion目录,这里,我们将工程hello的数据仓库建立在~/.subversion/repos/hello目录。

    [aaronwong@localhost ~]$ ls -p .subversion/repos/hello/
    conf/  dav/  db/  format  hooks/  locks/  README.txt

         
        (2)按照subversion的要求组建本地工程hello的工作目录
        假定工程hello的顶层目录为~/projects/hello(这里~代表/home/aaronwong/),则应如下组建工程的工作目录:

    ~/projects/hello/branches
    ~/projects/hello/tags
    ~/projects/hello/trunk/
                           hello.c
    //trunk目录是实际上的工程顶层目录,工程中的所有文件和文件夹都在该目录下组织。
    [aaronwong@localhost ~]$ cd projects/hello/
    [aaronwong@localhost hello]$ ls -p
    branches/  tags/  trunk/
    [aaronwong@localhost hello]$ cat trunk/hello.c
    //This is a original version.

    #include <stdio.h>

    int main()
    {
            printf("Hello world!\n");

    }


        (3)将本地工程hello导入本地的Subversion的工程仓库
        由于是首次导入,因此要加信息-m "initial import"。

    [aaronwong@localhost trunk]$ svn import ~/projects/hello/ file:///home/aaronwong/.subversion/repos/hello/ -m "initial improt"
    新增           /home/aaronwong/projects/hello/trunk
    新增           /home/aaronwong/projects/hello/trunk/hello.c
    新增           /home/aaronwong/projects/hello/branches
    新增           /home/aaronwong/projects/hello/tags

    提交后的版本为 1。

        注意,完成导入后,原目录~/projects/hello并不转换为“工作副本(working copy)”,而且该项目已经转由该仓库接管,即该仓库中已经包含了首次导入的工程的所有信息,与源目录~/project/hello再无任何关系,我 们完全可以删除这一目录而不必担心丢失工程项目数据。注意,如果源目录并不是一个“工作副本”,那么就无法用svn进行管理,在其中所作的任何变动都无法 提交到仓库。
        要用subversion对工程进行版本管理,那么工程项目的开发必须在一个“工作副本”中进行,即首先要从仓库获取一个“工作副本”。  

        (4)工程开发过程中的版本管理与控制
        使用subversion对工程进行版本管理的一般流程如下:
        a)建立工程的数据仓库,并导入工程的最初版本(前面已经完成);
        b)从仓库获取一个“工作副本”(svn checkout,可以获取最新版本也可以获取以前的某个版本),在这个“工作副本”中进行工程开发,修改完毕将变动提交到仓库。
        下面简单介绍b)步骤。
        由于工程hello已经导入到仓库,因此原目录可以删除。我们删除原目录,并从仓库获取工程hello的一个“工作副本”(working copy);当然,如果你当心这样做会造成数据丢失,完全可以重新建立一个目录,将“工作副本”保存到那里。

    [aaronwong@localhost projects]$ rm -rf hello/
    [aaronwong@localhost projects]$ svn checkout file:///home/aaronwong/.subversion/repos/hello/trunk hello
    A    hello/hello.c
    取出版本 1。
    //注意,我们用红色标出了"trunk",如果不指定这一目录,则会取出除工程源文件外的其他不必要的目录如branches和tags。
    [aaronwong@localhost projects]$ ls -a hello/
    .  ..  hello.c  .svn
    //可以看到“工作副本”下有一个.svn隐藏目录,其中就包含了subversion用來进行版本管理的信息。


        下面可以对工程hello的内容进行编辑和修改。注意,如果要在工程中增加或删除某一文件或目录(包括复制和移动),必须使用svn add/delete/mkdir/copy/move等相关命令进行标记。

    [aaronwong@localhost hello]$ pwd
    /home/aaronwong/projects/hello
    [aaronwong@localhost hello]$ vim hello.c
    [aaronwong@localhost hello]$ cat hello.c
    //This is the second version.

    #include <stdio.h>

    int main()
    {
            printf("Hello world!\n");
            return;
    }
    [aaronwong@localhost hello]$ mkdir doc
    [aaronwong@localhost hello]$ vim doc/readme.txt
    [aaronwong@localhost hello]$ svn add doc
    A         doc
    A         doc/readme.txt
    //说明:如果svn add的对象是一个目录,则该目录及其子目录和其下的文件都会被添加到工程。

       
        对工程编辑完毕,你可以检查一下该次编辑对工程(实际上是对你的"工作副本")做了哪些改动。

    [aaronwong@localhost hello]$ svn status
    M      hello.c
    A      doc
    A      doc/readme.txt
    [aaronwong@localhost hello]$ svn diff
    Index: hello.c
    ===================================================================
    --- hello.c     (版本 1)
    +++ hello.c     (工作副本)
    @@ -1,10 +1,10 @@
    -//This is a original version.
    +//This is the second version.
     
     #include <stdio.h>
     
     int main()
     {
             printf("Hello world!\n");
    -
    +       return;
     }
     
    Index: doc/readme.txt
    ===================================================================
    --- doc/readme.txt      (版本 0)
    +++ doc/readme.txt      (版本 0)
    @@ -0,0 +1,2 @@
    +This is an example for subversion tutorial.
    +
    //可以看到,svn diff提供了更详细的改动信息,并且很容易的将该命令的输出重定向为一个patch补丁。


        检查确认无误后,便可提交此次更改,同时要附加此次更改的说明注释信息。

    [aaronwong@localhost hello]$ svn commit -m "documents added."
    新增           doc
    新增           doc/readme.txt
    正在发送        hello.c
    传输文件数据..
    提交后的版本为 2。

        现在工程仓库中已经保存了上面所提交的版本2的工程的所有信息,因此,上面的“工作副本”也可以被删除:当然,如果下次你还要继续使用这个“工作副本”进 行工作,则可以保留这个副本,不过需要注意的是,如果你是在一个开发团队中,开发团队的任一成员都可能在你不知情的情况下更新了工程版本,因此,在团队开 发中,进入已有的“工作副本”进行编辑前,应该先使用"svn update"命令将当前“工作副本”更新到仓库中的最新版本。

    3 使用svn获取开源项目源代码
        这实际上是获取一个“工作副本”的过程。例如我需要下载ffmpeg的最新源代码,就可以使用svn checkout命令来完成:

    [aaronwong@localhost ~]$ svn checkout svn://svn.mplayerhq.hu/ffmpeg/trunk ffmpeg
    A    ffmpeg/configure
    A    ffmpeg/Doxyfile
    A    ffmpeg/ffmpeg.c
    A    ffmpeg/vhook
    A    ffmpeg/vhook/imlib2.c
    A    ffmpeg/vhook/drawtext.c
    A    ffmpeg/vhook/fish.c
    A    ffmpeg/vhook/null.c
    ......



        这篇文章仅仅是Subversion的使用入门,其实它的功能非常丰富和强大,如果你已经对它产生了兴趣,强烈推荐您阅读subversion在线书籍,您还可以进入网络社区或论坛与朋友进行更深入的讨论。

  • 相关阅读:
    12-Factor与云原生Part2
    Openshift部署流程介绍
    软件开发过程中的环境简介
    基于Openshift的SpringBoot微服务
    日志审计系统设计
    dotnetcore执行shell脚本
    12-Factor与云原生
    项目管理思考小记之一
    DevOps工程师的成长路线图
    消费者驱动的契约Consumer drivern Contract
  • 原文地址:https://www.cnblogs.com/phpnow/p/2593008.html
Copyright © 2020-2023  润新知