svn 版本管理详解

上一篇 / 下一篇  2010-05-10 10:27:55 / 个人分类:SVN

1. 导入一个未进行版本管理的本地项目到svn中
   命令:
        svn import [svn_path] [local folder]

   注意:
        本命令仅仅是将一个本地目录加入到svn responsitory 中。本地路径中的文件未进行管理,
        必须重新 svn checkout 一个本地拷贝进行操作。
        
2. svn 常用命令

2.1 更新命令

    svn update
   
2.2 做出修改

    svn add
    svn delete
    svn copy
    svn move
   
2.3 检验修改
   
    svn status
    svn diff
   
2.4 取消修改
   
    svn revert
   
    一般在本地修改了文件,尚未提交修改之前,可以使用该命令,取消你所做的本地修改。
   
    或者:
   
    你在本地使用了 svn add/delete等修改操作, 但是尚未进行svn commint,也可以
    通过该命令取消之前的操作。
   
    例:
    你在本地创建了一个新的目录foo
    $svn status
    ? foo   //说明foo目录尚未加入到svn版本控制中
   
    $svn add foo
    $svn status
    A foo
   
    $svn revert
    $svn status
    ? foo
   
2.5 解决冲突(合并别人的修改)
   
    svn update
   
    在进行svn update命令后,一般我们会看到每个更新文件的状态,具体状态字有如下几种:
   
    A: 表示添加
    D: 表示删除
    U: 表示更新
    G: 表示合并,并且合并过程中没有冲突
    C: 表示与本地文件发生冲突
   
    例:
    $svn update
    U intall
    G readme
    c bar.cpp
    update to revision 46.
   
    一旦发生冲突,svn会在你的更新目录下产生3个临时文件,等待你将冲突解决,
    冲突解决前不允许提交,即svn commit命令处理失败。
   
    例:
    $svn update
    C sandwich.txt
    update to revision 2;
   
    $ls -l
    sandwich.txt
    sandwich.txt.mine
    sandwich.txt.r1
    sandwich.txt.r2
   
    背景说明:
    张三和李四,同时在 revision 1的时候,checkout 到了本地;
    张三做为修改,并提交, 版本到 revision 2;
    李四此时未更新新版本,仍然在 revision 1 下修改sandwich.txt, 并且修改的地方与张三的修改冲突;
    李四修改后, 提交自己的修给, 发现提交失败, 报告版本太老;
    李四更新svn新版本,结果出现现在的冲突情况;
   
    sandwich.txt
    sandwich.txt.mine  //! 当前李四修改的未提交的新版本本文件
    sandwich.txt.r1    //! 当前李四更新冲突前的svn版本文件
    sandwich.txt.r2    //! 当前李四更新冲突前的svn版本文件
   
    而sandwich.txt 则是冲突版本文件, 该文件中,svn系统会自动添加很多冲突标记
   
    <<<<<<<.mine //!冲突标记
    [李四修给内容]
    =======      //!冲突标记
    [张三修给内容]
    >>>>>>>.r2   //!冲突标记
   
    解决冲突的方法有3种:
    1. 手动修给冲突文件,将冲突标记删除
    2. 使用一个临时文件(.mine, .r1, .r2)覆盖当前版本
    3. 放弃本地修给 svn revert <filename>
   
    svn resolved
   
    一旦冲突解决,就可以使用 svn resolved命令 , 该命令会自动删除3个临时文件。
   
    例:
    $svn resolved
    Resolved conflicted state of "sandwich.txt".
   
   
2.6 提交修改
   
    svn commit
   
    提交命令很简单,但是很多人在提交的时候,忘了写提交备注,或者备注写得不规范,给以后查询修给内容带来不便。
   
    备注例子:(使用序号说明每个修改)
   
    1. add xxx function
    2. fixed xxxx bug
    3. remove xxxx
   

3. svn 版本控制:分支、合并、标签
   
3.1 规划版本库

   svn 目录:
    /
    |
    |——project_name
    |   |
    |   |-- trunk (主干)
    |   |
    |   |-- branches (分支)
    |   |
    |   |-- tags (标签)
   
    主干: 是整个项目开发的主线;
    分支: 可以是开发者自己独立出来的一个分支,
          也可以是一个新的项目,与主干项目有一些功能上的差异,需要单独分开出来;
    标签: 项目开发过程中,各阶段发布的版本快照;
   
    svn revision 编号说明:
   
        +(r4)     +(r7)   
        ----------------->braches/tom_branch  
        |  +r(5)        +r(10)                  +r(20)
    0--------------------------trunk---------------------->n
                |
                ----------------------------->branches/sally_brach
                +(r6)            |(r12)
   
    ----------按时间递增---------------------------------------->
   
   
    svn merge
   
    svn merge 是个比较复杂的命令,下面做一个简单例子说明:
    背景:
    tom在自己的分支下走到了revision 7状态,
    此时主干开发,发现了一个bug, 该bug在tom的分支下也存在,
    主干开发修复该bug,主干版本到revision 10
   
    此时,tom决定将主干中该bug的修复,提交到自己的分支中:

    $svn merge -r 5:10 <svn目录>/trunk  <svn目录>>/branches/tom_branch
    U aa.c
    C bb.c
    发现此时 bb.c 文件在tom的分支下出现冲突,于是我们参照冲突的处理办法,解决冲突。
   
    $svn commit
    提交此次合并的操作。
   
   
    svn copy
    
    该命令主要于用户开新的分支与打标签。
   
    例子:
   
    tom从当前的trunk版本下,开一个独立的分支
   
    $svn copy <svn目录>/trunk <svn目录>>/branches/tom_branch
    $svn commit
   
    tom将自己的开发分支,发布一个新的版本,此时就打一个标签

    $svn copy <svn目录>>/branches/tom_branch <svn目录>/tags/project_tom.1.0.0
    $svn commit
   
   
    svn export
    发布项目时,不能将一些.svn信息也发布到安装包中,此时就需用 svn export命令
    例子:
    $svn export <svn目录>/tags/project_tom.1.0.0  ./project_tom.release.1.0.0
    $tar -cvzf project_tom.release.1.0.0.tar.gz  ./project_tom.release.1.0.0 
      

TAG:

 

评分:0

我来说两句

Open Toolbar