svn使用点滴

4 篇文章 0 订阅

注:本文档主要是自己平时svn使用总结,加上命令简析以供将来查询之便。

 

SVN 的基本指令介绍,主要参考:

SubTrain 的 PPT 前面頁数看一看, 基础就大概知道了,后面的都是进阶方面的东西,一般使用不到。

先來看 SVN Trunk/Tags/Branches 目录的架构和用途:

  • trunk: Main line of development(主干, 主要开发都在此 trunk)
  • tags: Releases (想要 Release 的时候, 就标个Tag,以后可以依据此tag来找回之前版本)
  • branches: Preparation of release, bug fixing(分支, 可以將某些功能切出來, 或者 bug fix 等切成分支, 等做完再用 Merge 合并回來)

 

SVN 文件状态:

  • ?:    此文件不存在 SVN 里面
  • A:    此次新增的文件
  • C:   此文件已经有人改过, 修改不成功, 需要人工介入
  • D:   此次删除的文件
  • M:   此文件有修改过
  • U:   此文件有被更新过
  • K:   此文件被锁定
  • G:   表示项目创建库中的文件和本地工作拷贝的文件合并到了一起

 

SVN 基本功能:

        1. 递归提交一个新路径(新目录及其下面的文件和子目录)的拷贝到版本库

              svn import [path] URL

  • svn import project_directory http://DOMAIN/svn_project
  • svn import project_directory file:///SVN_PATH/svn_project

              例子:将本地目录myproj导入到版本库的trunk/misc,trunk/misc在导入之前不需要

           存在—svn import会递归的为你创建目录。

           svn import myproj http://svn.red-bean.com/repos/trunk/misc

      说明:上述操作后,不会在版本库中创建目录myproj,如果你希望创建,需在URL后面加上

           myproj。....../trunk/misc/myproj 此时,本地的目录树并没有纳入版本控制,

           需要在执行命令 svn checkout才可以。

 

 

2. svn export

                 导出一个干净的不带.svn文件夹的目录树
                 一般默认下载最新的代码!
                 如果你想要下载指定版本的工程的话用:
                 svn export -r 2232 http://10.11.22.11/svn/project001
 

                 -r后面是版本号,最后面是URL
                 svn  export  [-r 版本号]  http://路径(目录或文件的全路径) [本地目录全路径] --username 用户名
                 svn  export  [-r 版本号]  svn://路径(目录或文件的全路径) [本地目录全路径] --username 用户名
 

                 查看更多关于export命令相关的使用可用下面命令:svn help export
                 下面是命令的结果,关于使用和各种参数的说明:
                 usage: 1. export [-r REV] URL[@PEGREV] [PATH]
                             2. export [-r REV] PATH1[@PEGREV] [PATH2]

 

        3. 从svn版本库中checkout到本地一个工作拷贝,此时你本地磁盘还没有任何一份一样的拷贝

 

              svn co

  • svn co http://SVN_PATH/svn_project
  • svn co file:///SVN_PATH/svn_project
  • svn co -r 12 file:///var/lib/svn/dev/projects # 出第12版的 projcets code

        4. 从svn版本库中更新code到本地

              svn up

              例子:
                   svn update   -----默认将当前目录以及子目录下的所有文件都更新到最新版本。
                   svn update -r 200 test.php   ------(将版本库中的文件test.php还原到版本200)
                   svn update test.php    -----(更新,于版本库同步。如果在提交的时候提示过期的话,

                                                                  是因为冲突,需要先update,修改文件,然后清除svn resolved,

                                                                  最后再提交commit)

                    svn update -r 200   ------从svn版本库中更新指定版本号200的所有文件到本地

        5.  文件对比

                svn diff

                例子:

                    svn diff test.php   ------把test.php与版本库中的文件进行对比
                    svn diff -r 200:201 test.php   ------对版本200和201中的test.php进行对比

 

        6. 将本地的本件添加到svn版本库中

               svn add path/filename

               例子:

                    svn add test.php   ------(添加test.php)

                    svn add *.php   ------添加当前目录的所有php文件到svn版本库中

               说明:上述命令之后,仅仅是作了一个添加的改变信息,你需要再执行svn commit命令来更新

 

        7. 将改动的文件提交到svn版本库中

               svn ci [path/filename]

               例子:

                    svn ci test.c   ------把test.c文件提交到svn版本库中,此时svn版本库中应该已有之前的test.c


        8. 删除文件

              svn del [path/filename]

              例子:

                   svn del test.c   -------删除test.c文件

               说明:上述命令之后,仅仅是作了一个删除的改变信息,你需要再执行svn commit命令来更新

                   svn del svn://192.168.1.1/pro/test.c   ------直接删除svn版本库中的文件,不需要再svn ci

 

        9. 查看svn文件信息

              svn info

 

        10. svn帮助文档

               svn -h  或  svn help  或 svn add -h (查看svn add命令帮助)

 

        11. 查看日志

                 svn log [path/filename]

                 例子:

                     svn log test.php   ------显示这个文件的所有修改记录,及其版本号的变化
 

        12. 查看文件或者目录状态

                 svn st

                 例子:

                     svn status path   ------目录下的文件和子目录的状态,正常状态不显示
                     svn status -v path   ------显示文件和子目录状态。第一列保持相同,第二列显示工作版本号,

                                                               第三和第四列显示最后一次修改的版本号和修改人。
                     注:svn st、svn diff和 svn revert这三条命令在没有网络的情况下也可以执行的,原因是svn

                             在本地的.svn中保留了本地版本的原始拷贝。

        13. 显示path目录下的所有属于版本库的文件和目录

                 svn ls path

 

        14. 创建纳入版本控制下的新目录
                 svn mkdir

                 例子:

                     1、mkdir PATH   ------每一个以工作副本 PATH 指定的目录,都会创建在本地端,并且加入

                                                            新增调度,以待下一次的提交。
                     2、mkdir URL   ------每个以URL指定的目录,都会透过立即提交于仓库中创建。


                     在这两个情况下,所有的中间目录都必须事先存在。

        15. 加锁/解锁

                 svn lock / svn unlock filename

 

        16. 恢复本地修改
                 svn revert

                  恢复原始未改变的工作副本文件 (恢复大部份的本地修改)。
                  revert PATH…
                 注意: 本子命令不会存取网络,并且会解除冲突的状况。但是它不会恢复被删除的目录

        17. 代码库URL变更
                  svn switch (sw)    ------ 更新工作副本至不同的URL

                  用法: 1、switch URL [PATH]
                            2、switch –relocate FROM TO [PATH...]

                  1、更新你的工作副本,映射到一个新的URL,其行为跟“svn update”很像,也会将服务器

                       上文件与本地文件合并。这是将工作副本对应到同一仓库中某个分支或者标记的方法。


                  2、改写工作副本的URL元数据,以反映单纯的URL上的改变。当仓库的根URL变动(比如

                        方案名或是主机名称变动),但是工作副本仍旧对映到同一仓库的同一目录时使用这个命令

                        更新工作副本与仓库的对应关系。
                

                 例子:svn switch --relocate http://59.41.99.254/mytt http://www.mysvn.com/mytt

        18. 解决冲突
                 svn resolved
   ------移除工作副本的目录或文件的“冲突”状态。
              用法: resolved PATH…
              注意: 本子命令不会依语法来解决冲突或是移除冲突标记;它只是移除冲突的相关文件,然后

                        让 PATH 可以再次提交。

        19. 输出指定文件或URL的内容。
                 svn cat 目标[@版本
    ------ 如果指定了版本,将从指定的版本开始查找。
           

                 svn cat -r PREV filename > filename

                 (PREV 是上一版本,也可以写具体版本号,这样输出结果是可以提交的)

        20. 为SVN加入Email通知
                 可以通过Subversion的Hook脚本的方式为SVN加入邮件列表功能

 
                 编译安装了Subversion后 在源码的tools 下有一个comm-email.pl的Perl脚本,在你的

                 档案目录下有一个hooks目录,进入到hooks目录把post-commit.tmpl 改名为post-commit

                 并给它可执行的权限。更改post-commit脚本 把comm-email.pl脚本的决对路径加上,

                 否则 SVN找不到comm-email.pl

                 REPOS="$1"
                 REV="$2"
                 /usr/local/svn/resp/commit-email.pl "$REPOS" "$REV"email@address1.com

                 email@address2.com email@address3.com
                 #log-commit.py --repository "$REPOS" --revision "$REV"
                最后一行是用来记日志的

         21. 建立一個 branch

                  svn copy http://svnserver/calc/trunkhttp://svnserver/calc/branches/my-calc-branch

                  -m 'create a branch' 

         22. 建立 Release Tags

                  svn copy http://svnserver/calc/trunkhttp://svnserver/calc/tags/Release-1.0.0

                  -m 'create Release tags for Release 1.0.0'

         23. 合并两个版本的档案

                  svn merge -r REV1:REV2 {path/to/workingcopy}

                  (UNDO) svn merge -r 1234:1233 ...

                  (MERGE)svn merge -r 1233:1234 ...

                  svn merge --dry-run -r 343:344 http://svn.example.com/repos/calc/trunk

         24. 有 "C" 状态处理完后, 用 resolved  将自动产生的档案删除, 才能正常 commit:

                  svn resolved filename

         25. svn的switch命令与branch用法 、merge命令用法

               svn的switch命令的作用是转变本地工作目录所指向svn的url。 
               运行switch之后,本地工作目录的文件更新为新的url中的内容,而该工作目录原来所指向的url中的内容在服务器上不会

               变化。再次switch,选择原来的url,内容就会回来。 

               把当前trunk中的版本,branch到一个分支去。我使用的tortoise,在当前的工作目录(trunk)点击右键,点击branch,在

               to框中输入要branch的url,点击ok。如果在branch中已经存在该文件,就会失败。这时候应该是做merge。简单点可以

               删除branch中相应的文件,然后branch就会成功。这时候在svn服务器上trunck中的文件已经保存了一份到branch了,

               然后在本地的branch目录执行update,就可以得到最新的版本了 

              使用svn的merge命令,把一个版本的变化合并到另一个版本。 

              我使用的tortoise,在当前的工作目录点击右键,选择merge,在from框输入源url,在revision中输入需要开始merge的版本

              起点,比如1400,那就意味着从1400开始后面的变化会merge到工作路径去。 

              去掉to的checkbox选项,在下面的框子里输入当前工作路径的url, revision选择Head revision, 表示合并到当前最高的版

              本上。点dry run 可以看到试运行合并的效果,点merge就合并了。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值