原文出处: http://blog.csdn.net/limingzhong198/article/details/22394809

前言:关于Linux(Unix)系统下的SVN命令使用的文章,在网络上有很多,大多数都千篇一律,把SVN命令一写,有些命令连一个说明或者实例都没有,包括执行的环境也没有任何的说明,对部分新学习资料的人来讲,有时候就是一头雾水。下面就从SVN的帮助文档开始,让我们一起来了解SVN命令在Linux(Unix)下的使用。

注:部分说明借助于网络资料。

一、环境配置:

CentOS系统:32位、6.3版本;

主机名:samba;

虚拟机:VMware® Workstation 9.0.0 build-812388;

SVN版本:svnserve, version 1.6.1 (r37116);

SVN服务器地址:192.168.31.131;

实验客服端地址:192.168.31.131;

二、查看SVN管理目录下的项目:

利用SVN客户端,查看SVN下的管理项目,

从图中可以看出:有多个项目,接下来我们就以 trunk 本身为例。

三、查看SVN的可用命令:

首先我们查看SVN工具都有哪些可用的命令:

[root@samba ~]# svn --help

显示结果如图:

图中所显示的命令都是可执行的命令。

四、命令执行:

         每个命令都分为:查看帮助、命令说明、使用方法、命令参数、使用实例、过程结果、问题说明等。

         1、checkout(别名:co)命令:

                查看帮助:[root@samba ~]# svn co --help;

命令说明:Check out a working copy from a repository.

即:剪出版本库中的可用的工作目录;

使用方法:checkout URL[@REV]... [PATH];

命令参数:分为 Valid options 和 Global options两种;

Valid options:

Global options:

使用实例:[root@samba /]# svn co svn://192.168.31.131/svntest/trunk

过程结果:

问题说明:略;

注:只要这个过程成功了,基本上你的项目就下载到客服端了。后面的实例都以 trunk 项目为例做命令的验证。

         2、add命令:

                查看帮助:[root@samba ~]# svn add --help;

命令说明:Put files and directories under version control, scheduling them for addition to repository.  They will be added in next commit.

即:这个说明的红色加粗部分很重要,后面说明;

使用方法:add PATH...;

命令参数:分为 Valid options 和 Global options两种(help命令可查,此处略);

使用实例:[root@samba ant]# svn add *.java(可以使用通配符)

ant目录的完整目录是:/trunk/src/com/ant,在添加项目之前我们需要执行 cd /trunk/src/com/ant 命令,否则会出现问题。

过程结果:

问题说明 1、重复添加问题:

过程结果:

提示结果:‘Test.java’已经处于svn版本控制执行。

问题说明 2、退出 /trunk/src/com/ant 目录,再执行svn add *.java:

过程结果:

                                        
                                        提示结果:‘.’不在工作目录。

问题说明 3、在 /trunk/src/com/ant 目录下新建目录 test,在 test 目录下新建 Test.java 文件,然后在 test 目录下再执行 svn add *.java:

过程结果:

                                        提示结果:‘.’不在工作目录。

我们回到 test 目录上级目录 ant,在执行 svn add *

过程结果:

可以看到:我们新建的目录和文件都添加成功。

注:在此实例中,我们需要注意的是,我们大部分操作都必须处于svn版本控制的工作目录。

         3、commit(别名:ci)命令:

                 查看帮助:[root@samba ~]# svn commit --help;

命令说明:Send changes from your working copy to the repository.

即:将你的变更从你的SVN工作目录提交到版本库;

使用方法:commit PATH...;

命令参数:分为 Valid options 和 Global options两种(help命令可查,此处略);

使用实例:[root@samba ant]# svn ci  -m “commit dir and file” test(可以使用通配符,可同时提交目录和文件)

ant目录的完整目录是:/trunk/src/com/ant,执行 cd /trunk/src/com/ant 命令进入ant目录。

过程结果:

问题说明 1、在没有对文件改动之前,重复提交问题:

在提交之后你会发现,不会输出任何的执行命令信息,是因为该命令只对有变更的记录进行提交。

注:在此实例中,我们需要注意的是,我们大部分操作都必须处于svn版本控制的工作目录。

         4、lock命令:

                 查看帮助:[root@samba ~]# svn lock --help;

命令说明:Lock working copy paths or URLs in the repository, so that no other user can commit changes to them.

即:将锁住SVN工作目录或者版本库的URL,以使没有人可以提交目录或者文件的变更信息;

使用方法:lock TARGET...;

命令参数:分为 Valid options 和 Global options两种(help命令可查,此处略);

使用实例:[root@samba test]# svn lock  -m “lock dir and file” Test.java(可使用通配符,比如:T*.*)

test目录的完整目录是:/trunk/src/com/ant/test,执行 cd /trunk/src/com/ant/test 命令进入test目录。

过程结果:

问题说明 1、进入SVN工作目录下的ant目录,对整个test目录进行加锁:

过程结果:

                                         提示结果:在你的版本中存储的文件系统数据中,/trunk/src/com/ant/test 不是一个文件。

问题说明 2、在你的加锁命令中,出现了非英文字符:

过程结果:

                                         提示结果:无效的UTF-8的序列号。

         5、unlock命令:

                 查看帮助:[root@samba ~]# svn unlock --help;

命令说明:Unlock working copy paths or URLs.

即:解除SVN工作目录或者版本库URL的锁;

使用方法:unlock TARGET...;

命令参数:分为 Valid options 和 Global options两种(help命令可查,此处略);

使用实例:[root@samba test]# svn unlock  -m “lock dir and file” Test.java(可使用通配符,比如:T*.*)

test目录的完整目录是:/trunk/src/com/ant/test,执行 cd /trunk/src/com/ant/test 命令进入test目录。

过程结果:

问题说明 1、对一个文件在不知情的情况下重复解锁:

过程结果:

                                         提示结果:在SVN工作目录中,某文件没有被锁。

注:综合4、5两个命令,如果出现以下情况:

说明你的文件在SVN服务器上已经被某个用户加锁,而在你自己的客户端的SVN工作目录中,该文件又已经被解锁,这种情况一般都采用终极解决方案,那就是要求该文件被锁用户登陆SVN服务器,直接将该文件解锁,然后在客户端重新下载该文件。

注:在本地加锁或者解锁,记得提交到服务器。

         6、delete(别名:del, remove, rm)命令:

                 查看帮助:[root@samba ~]# svn delete --help;

命令说明:Remove files and directories from version control.(del, remove, rm)

即:从SVN版本控制中删除文件或者目录;

使用方法:delete PATH...;

delete URL...。

命令参数:分为 Valid options 和 Global options两种(help命令可查,此处略);

使用实例:[root@samba test]# svn delete Test.java(可使用通配符,比如:T*.*)  --删除文件

[root@samba test]# svn delete test(可使用通配符,比如:t*)  --删除目录

test目录的完整目录是:/trunk/src/com/ant/test,执行 cd /trunk/src/com/ant/test 命令进入test目录。

过程结果:

问题说明:略;

注:执行上面的命令,只能删除SVN版本控制下的文件,不能删除目录,故删除目录时,应该采用Linux(Unix)系统的rm命令,同时删除后记得提交。

         7、move(别名:mv, rename, ren)命令:

                 查看帮助:[root@samba ~]# svn move --help;

命令说明:Move and/or rename something in working copy or repository.

即:移动或者重命名SVN工作目录或者版本库;

使用方法:move SRC... DST               

                 命令参数:分为 Valid options 和 Global options两种(help命令可查,此处略);

使用实例:[root@samba test]# svn move Test.java Test2.java

[root@samba test]#  svn move -m "ss" svn://192.168.31.131/svntest/trunk/src/com/ant/test/Test2.java svn://192.168.31.131/svntest/trunk/src/com/ant/test/Test3.java

test目录的完整目录是:/trunk/src/com/ant/test,执行 cd /trunk/src/com/ant/test 命令进入test目录。

过程结果:

问题说明:略;

注:执行上面的第一种实例命令记得提交。第二种命令是直接修改服务器的文件名,不用提交。

         8、log命令:

                 查看帮助:[root@samba ~]# svn log --help;

命令说明:Show the log messages for a set of revision(s) and/or file(s).

即:显示版本库文件的日志信息

使用方法:log [PATH]

log URL[@REV] [PATH...]

命令参数:分为 Valid options 和 Global options两种(help命令可查,此处略);

使用实例:[root@samba test]# svn log T*(一般不要使用通配符,除非该文件目录下只有一个文件)

[root@samba test]# svn log svn://192.168.31.131/svntest/trunk/src/com/ant/test/Test3.java

test目录的完整目录是:/trunk/src/com/ant/test,执行 cd /trunk/src/com/ant/test 命令进入test目录。

过程结果:

问题说明 1、当你的SVN工作目录或者版本库的某个文件不存在时:

过程结果:

注:尽量查看存在文件或目录的日志信息,且一般不要使用通配符,否则会出现下面的情况:

         9、info命令:

                 查看帮助:[root@samba ~]# svn info --help;

命令说明:Display information about a local or remote item.

即:显示本地或者远程服务器文件的详细信息

使用方法:info [TARGET[@REV]...]

命令参数:分为 Valid options 和 Global options两种(help命令可查,此处略);

使用实例:[root@samba test]# svn info Test.java(可以使用通配符)

test目录的完整目录是:/trunk/src/com/ant/test,执行 cd /trunk/src/com/ant/test 命令进入test目录。

过程结果:

问题说明:略;

         10、list(别名:ls)命令:

                 查看帮助:[root@samba ~]# svn list --help;

命令说明:List directory entriesin the repository.

即:显示版本库目录的实体,包括目录下的子目录和文件。

使用方法:list [TARGET[@REV]...];

命令参数:分为 Valid options 和 Global options两种(help命令可查,此处略);

使用实例:[root@samba ant]# svn list [test](不建议使用通配符,除非你的目录开头字母是不重复的,否则分不清目录下文件的归属)

ant目录的完整目录是:/trunk/src/com/ant,执行 cd /trunk/src/com/ant 命令进入ant目录。

过程结果:

问题说明:略;

         11、help(别名:?, h)命令:

                 查看帮助:[root@samba ~]# svn help --help;

命令说明:Describe the usage of this program or its subcommands.

即:对svn命令或者使用程序的一种描述。

使用方法:help [SUBCOMMAND...];

命令参数:只有Global options一种(help命令可查,此处略);

                 使用实例:[root@samba ~]# svn ci --help(不可以使用通配符)       

过程结果:

问题说明:略;

         12、mkdir命令:

                 查看帮助:[root@samba ~]# svn mkdir --help;

命令说明:Create a new directory under version control.

即:在SVN版本控制下创建目录。

使用方法:mkdir PATH...;

mkdir URL...

命令参数:分为 Valid options 和 Global options两种(help命令可查,此处略);

使用实例:[root@samba ant]# svn mkdir test3(不可以使用通配符)

[root@samba ant]# svn mkdir -m "create dir" svn://192.168.31.131/svntest/trunk/src/com/ant/test4

ant目录的完整目录是:/trunk/src/com/ant,执行 cd /trunk/src/com/ant 命令进入ant目录。

过程结果:

                         

问题说明 1、第一种方式如果不在版本控制目录之下执行:

过程结果:

                                        提示结果:‘.’不在工作目录。

注:第一种方式创建完目录之后,需要提交,第二种直接将目录创建在版本库的URL下,不需要提交尽。提交目录或文件时加上 -m 参数,否则会提示如下错误:

         13、status(别名:stat, st)命令:

                 查看帮助:[root@samba ~]# svn status --help;

命令说明:Print the status of working copy files and directories.

即:打印SVN工作目录和文件状态。

使用方法:status [PATH...];

命令参数:分为 Valid options 和 Global options两种(help命令可查,此处略);

使用实例:[root@samba ant]# svn status -v *(可以使用通配符)

ant目录的完整目录是:/trunk/src/com/ant,执行 cd /trunk/src/com/ant 命令进入ant目录。

过程结果:

问题说明 1、将上面的执行命令去掉“-v”,不会有任何的输出,可能跟SVN版本有关。

注:在执行status命令时,建议强制加上“-v”命令参数,第一列保持相同,第二列工作版本号,第三列最后一次修改的修改人,第四列最后一次修改的版本号。

         14、copy(别名:cp)命令:

                 查看帮助:[root@samba ~]# svn status --help;

命令说明:Duplicate something in working copy or repository, remembering history.

即:备份历史。

使用方法:copy SRC[@REV]... DST;

命令参数:分为 Valid options 和 Global options两种(help命令可查,此处略);

使用实例:[root@samba test]# svn cp Test3.java Test4.java(不可以使用通配符)

[root@samba test]# svn cp -m "ss" Test3.java svn://192.168.31.131/svntest/trunk/src/com/ant/test2/Test4.java

test目录的完整目录是:/trunk/src/com/ant/test,执行 cd /trunk/src/com/ant/test 命令进入test目录。

过程结果:

                         

问题说明:略;

注:第一种方式需要手动提交,第二种方式可以自动提交。

         15、update(别名:up)命令:

                 查看帮助:[root@samba ~]# svn update --help;

命令说明:Bring changes from the repository into the working copy.

即:将服务器的变更引入本地项目。

使用方法:update [PATH...];

命令参数:分为 Valid options 和 Global options两种(help命令可查,此处略);

使用实例:[root@samba test]# svn up t*(可以使用通配符)

test目录的完整目录是:/trunk/src/com/ant/test,执行 cd /trunk/src/com/ant/test 命令进入test目录。

过程结果:

问题说明:略;

         16、diff(别名:di)命令:

                 查看帮助:[root@samba ~]# svn diff --help;

命令说明:Display the differences between tworevisions or paths.

即:比较两个版本的差异。

使用方法:diff [-c M | -r N[:M]] [TARGET[@REV]...];

diff [-r N[:M]] --old=OLD-TGT[@OLDREV] [--new=NEW-TGT[@NEWREV]] \[PATH...]

diff OLD-URL[@OLDREV] NEW-URL[@NEWREV]

命令参数:分为 Valid options 和 Global options两种(help命令可查,此处略);

使用实例:[root@samba test]# svn di T*(可以使用通配符)

[root@samba test]# svn di -r 20:18 T*(可以使用通配符)

test目录的完整目录是:/trunk/src/com/ant/test,执行 cd /trunk/src/com/ant/test 命令进入test目录。

过程结果:

问题说明:略;

注:第一种情况是与本地版本比较,第二种情况是显示指定版本的比较。

         17、merge命令:

                 查看帮助:[root@samba ~]# svn merge --help;

命令说明:Apply the differences between two sources to a working copy path.

即:将两个指定的版本差异合并到当前的工作目录文件。

使用方法:merge sourceURL1[@N] sourceURL2[@M] [WCPATH];

merge sourceWCPATH1@N sourceWCPATH2@M [WCPATH];

merge [-c M[,N...] | -r N:M ...] SOURCE[@REV] [WCPATH]

命令参数:分为 Valid options 和 Global options两种(help命令可查,此处略);

使用实例:[root@samba test]# svn merge -r 20:18 Test3.java(不建议使用通配符)

test目录的完整目录是:/trunk/src/com/ant/test,执行 cd /trunk/src/com/ant/test 命令进入test目录。

过程结果:略

问题说明:略;

注:当两个文件产生冲突的时候,需要先处理冲突,再执行合并命令。

         18、revert命令:

                 查看帮助:[root@samba ~]# svn revert --help;

命令说明:Restore pristine working copy file (undo most local edits).

即:恢复原始未改变的工作副本文件 (恢复大部份的本地修改)。

使用方法:revert PATH...

命令参数:分为 Valid options 和 Global options两种(help命令可查,此处略);

使用实例:[root@samba test]# svn revert Test3.java(不建议使用通配符)

[root@samba test]# echo "dd" >> Test3.java(数据准备)

test目录的完整目录是:/trunk/src/com/ant/test,执行 cd /trunk/src/com/ant/test 命令进入test目录。

过程结果:

问题说明:略;

         19、blame(别名:praise, annotate, ann)命令:

                 查看帮助:[root@samba ~]# svn blame --help;

命令说明: Output the content of specified files or URLs with revision and author information in-line.

即:输出指定文件带有版本号的内容和作者在线信息。

使用方法:blame TARGET[@REV]...

命令参数:分为 Valid options 和 Global options两种(help命令可查,此处略);

使用实例:[root@samba test]# svn blame Test.*(可以使用通配符)

test目录的完整目录是:/trunk/src/com/ant/test,执行 cd /trunk/src/com/ant/test 命令进入test目录。

过程结果:

问题说明:略;

注:只能执行文件,不能执行目录。

         20、export命令:

                 查看帮助:[root@samba ~]# svn export --help;

命令说明: Create an unversioned copy of a tree.

即:采用复制的方式创建一个不在SVN版本控制下的树。

使用方法:export [-r REV] URL[@PEGREV] [PATH]

export [-r REV] PATH1[@PEGREV] [PATH2]

命令参数:分为 Valid options 和 Global options两种(help命令可查,此处略);

使用实例:[root@samba ant]# svn export . test5(不可以使用通配符)

ant目录的完整目录是:/trunk/src/com/ant,执行 cd /trunk/src/com/ant 命令进入ant目录。

过程结果:

问题说明:略;

注:创建之后需要提交。

         21、import命令:

                 查看帮助:[root@samba ~]# svn import --help;

命令说明:Commit an unversioned file or tree into the repository.

即:提交一个不在版本控制下的树或者文件到版本库。

使用方法:import [PATH] URL

命令参数:分为 Valid options 和 Global options两种(help命令可查,此处略);

使用实例:[root@samba ant]# svn import -m "sss" svn://192.168.31.131/svntest/trunk/src/com/ant/test5(不可以使用通配符)

ant目录的完整目录是:/trunk/src/com/ant,执行 cd /trunk/src/com/ant 命令进入ant目录。

过程结果:

问题说明:略;

         22、cat命令:

                 查看帮助:[root@samba ~]# svn cat --help;

命令说明:Output the content of specified files or URLs.

即:输出指定文件的内容(URLs也必须指定到文件类型)。

使用方法:cat TARGET[@REV]...

命令参数:分为 Valid options 和 Global options两种(help命令可查,此处略);

使用实例:[root@samba ant]# svn cat svn://192.168.31.131/svntest/trunk/src/com/ant/test Test3.java(可以使用通配符)

ant目录的完整目录是:/trunk/src/com/ant,执行 cd /trunk/src/com/ant 命令进入ant目录。

过程结果:

问题说明:略;

注:必须指定到文件或者文件类型。

         23、changelist(别名:cl)命令:

                 查看帮助:[root@samba ~]# svn changelist --help;

命令说明:Associate (or dissociate) changelist CLNAME with the named files.

即:带有名称的文件关联列表。

使用方法:changelist CLNAME TARGET...

changelist --remove TARGET...

命令参数:分为 Valid options 和 Global options两种(help命令可查,此处略);

使用实例:[root@samba test]# svn changelist T*(可以使用通配符)

test目录的完整目录是:/trunk/src/com/ant/test,执行 cd /trunk/src/com/ant/test 命令进入test目录。

过程结果:

问题说明:略;

         24、switch(别名:sw)命令:

                 查看帮助:[root@samba ~]# svn switch --help;

命令说明:Update the working copy to a different URL.

即:带有名称的文件关联列表。

使用方法:switch URL[@PEGREV] [PATH]

switch --relocate FROM TO [PATH...]

命令参数:分为 Valid options 和 Global options两种(help命令可查,此处略);

使用实例:[root@samba trunk2]# svn switch svn://192.168.31.131/svntest/trunk/.(不建议使用通配符)

[root@samba /]# svn mkdir trunk2(目录准备)

[root@samba /]# cd trunk2(目录准备)

过程结果:

问题说明 1、在trunk2中的目录文件 /src/com/ant/test/Test.java添加内容并提交整个trunk2目录:

[root@samba test]# echo "cccc" >> Test.java

[root@samba /]# svn ci -m "commit" trunk2

过程结果:

同时该文件的md5sum值为:bf3b426d3ee8f0beecba0d3c9e5a8392

SVN服务器上/trunk/src/com/ant/test/的结果:

将/trunk/src/com/ant/test/结果下载到本地,并查看md5sum值为:bf3b426d3ee8f0beecba0d3c9e5a8392

                                         我们可以看到,这两个目录下的文件的md5sum值是一样的,就说明这两个文件是一样的。

那么为什么是一样的呢?我们知道在计算机里,修改一个文件时,被提交到另外一个文件,只能有一种可能,那就是我们在执行sw命令时,我们所操作的是一个软连接文件,这样才会两个文件一起被修改。如何证明我们的判断呢?我们来看一下trunk2目录的信息,结果如下:

从图中我们可以看到,trunk2的URL是我们的trunk的远程目录,这就相当于一个文件的软连接。这就是我们提交trunk2目录下的文件,SVN服务器上的trunk目录下的文件也随之改变的原因。

问题说明 2、在trunk中的目录文件 /src/com/ant/test/Test.java添加内容并提交整个trunk目录,其变动不会体现在trunk2中,所以从这一点来讲,跟软连接还是有区别的:

注:该命令的目的是做一个工作目录的备份,类似文件的软连接。

最新文章

  1. sh脚本异常:/bin/sh^M:bad interpreter: No such file or directory
  2. react native改变app的图标和名称
  3. JavaWeb学习笔记——JavaBean的保存范围和删除
  4. 轻松实现ajax登录时让浏览器保存密码
  5. ArcGIS与SuperMap的使用比较(1)
  6. 启用域中对象的"防止意外删除"功能
  7. iOS 5.0 后UIViewController新增:willMoveToParentViewController和didMoveToParentViewCon
  8. input[type='submit']input[type='button']button等按钮在低版本的IE下面,去掉黑色边框的问题
  9. 用Emacs 写python了
  10. iterator迭代器的使用
  11. ORA-01152错误解决方法(转)
  12. How to Use Javascript to Control Quicktime
  13. MFC连接Access讲解(3合1) .
  14. MSSQL事务隔离级别详解(SET TRANSACTION ISOLATION LEVEL)
  15. cmd应用基础 扫盲教程
  16. 使用LSTM-RNN建立股票预测模型
  17. linux系统版本大全
  18. Dispatch Queue 之内存中常驻的几个结构
  19. 51nod 1057 N的阶乘 (大数运算)
  20. Service Mesh简介

热门文章

  1. Windows下hosts文件的作用
  2. MSMQ学习笔记二——创建Message Queue队列
  3. php一个类引用另一个类的方法的写法
  4. 【LOJ6045】「雅礼集训 2017 Day8」价(网络流)
  5. DTcms网站伪静态逻辑
  6. Python——配置环境的导出与导入
  7. JS-输入数字输出大写中文
  8. TLS握手协议
  9. 牛客小白月赛2 D 虚虚实实 【欧拉图】【连通图】
  10. js、jquery中全局替换replace