Subversion常用操作总结

Subversion常用操作总结



徐东来,7.26.2007

 

一、import和checkout

使用svn import来导入一个新项目到Subversion的版本库

使用svn checkout从版本库取出一个新拷贝

二、 基本工作周期

典型的工作周期是这样的:

·   更新你的工作拷贝

o        svn update

·   做出修改

o        svn add

o        svn delete

o        svn copy

o        svn move

·   检验修改

o        svn status

o        svn diff

o        svn revert

·   合并别人的修改到工作拷贝

o        svn update

o        svn resolved

·   提交你的修改

o        svn commit

三、常用命令格式查询

·   svn add — 添加文件、目录或符号链

$ svn add foo.c
$ svn add testdir  #svn add缺省的行为方式是递归的
$ svn add --non-recursive otherdir
$ svn add * --force (添加所有工作拷贝的未版本化文件,包括那些隐藏在深处的文件)

 

·   svn blame — 显示特定文件和URL内嵌的作者和修订版本信息。很有意思,可以显示每一行源代码的作者和修订版本。

svn blame foo.c

 

·   svn cat — 输出特定文件或URL的内容。

svn cat foo.c
svn cat -rPREV foo.c  查看前一版本的内容

 

·   svn checkout — 从版本库取出一个工作拷贝。

常用选项
--revision (-r) REV
--quiet (-q)
--non-recursive (-N)
--username USER
--passwordPASS

 

·   svn cleanup — 递归清理工作拷贝。


 

·   svn commit — 将修改从工作拷贝发送到版本库。

选项
--message (-m) TEXT
--file (-F) FILE
--quiet (-q)
--non-recursive (-N)
$ svn commit -m "added howto section."
$ svn commit -F msg foo.c
$ svn commit --force-log --file file_under_vc.txt foo.c

 

·   svn copy — 拷贝工作拷贝的一个文件或目录到版本库。

这是恢复死掉文件的推荐方式!
$ svn copy file:///tmp/repos/test/far-away near-here

 

这是在版本库里作“标签”最简单的方法—svn copy那个修订版本(通常是HEAD)到你的tags目录。

$ svn copy file:///tmp/repos/test/trunk file:///tmp/repos/test/tags/0.6.32-prerelease -m "tag tree"

 

不要担心忘记作标签—你可以在以后任何时候给一个旧版本作标签:
$ svn copy -r 11 file:///tmp/repos/test/trunk file:///tmp/repos/test/tags/0.6.32-prerelease -m "Forgot to tag at rev 11"

 

·   svn delete — 从工作拷贝或版本库删除一个项目。

$ svn delete myfile
$ svn commit -m "Deleted file 'myfile'."

 

直接删除一个URL,你需要提供一个日志信息:
$ svn delete -m "Deleting file 'yourfile'" file:///tmp/repos/test/yourfile

 

强制删除本地已修改文件的例子:
$ svn delete --force over-there 

 

·   svn diff — 比较两条路径的区别。

比较BASE和你的工作拷贝(svn diff最经常的用法):
$ svn diff filename

 

察看你的工作拷贝对旧的修订版本的修改:
$ svn diff -r 3900 fileName

 

使用范围符号来比较修订版本3000和3500
$ svn diff -r 3000:3500 fileName

 

使用--diff-cmd CMD -x来指定外部区别程序
$ svn diff --diff-cmd /usr/bin/diff -x "-i -b" fileName

 

·   svn export — 导出一个干净的目录树。

从你的工作拷贝导出(不会打印每一个文件和目录):
$ svn export a-wc my-export
从版本库导出目录(打印所有的文件和目录):
$ svn export file:///tmp/repos my-export

 

当使用操作系统特定的分发版本,使用特定的EOL字符作为行结束符号导出一棵树会非常有用。--native-eol选项会这样做,但是如果影响的文件拥有svn:eol-style = native属性,举个例子,导出一棵使用CRLF作为行结束的树(可能是为了做一个Windows的.zip文件分发版本):
$ svn export file://tmp/repos my-export --native-eol CRLF

 

·   svn import — 递归提交一个路径的拷贝到URL。

选项
--message (-m) TEXT
--file (-F) FILE
--quiet (-q)
--non-recursive (-N)
--username USER
--passwordPASS

 

这会导入本地目录myproj到版本库的 根目录:
$ svn import -m "New import" myproj http://svn.red-bean.com/repos/test

 

·   svn info — 打印PATH的信息。

打印你的工作拷贝的路径信息,包括:
  路经
  名称
  URL
  修订版本
  节点类型
  最后修改的作者
  最后修改的修订版本
  最后修改的日期
  最后更新的文本
  最后更新的属性
  核对

 

·   svn list — 列出版本库目录的条目。

选项
--revision (-r) REV
--verbose (-v)
--recursive (-R)
--incremental
--xml
$ svn list --verbose file:///tmp/repos

 

·   svn log — 显示提交日志信息。

选项
--revision (-r) REV
--quiet (-q)
--verbose (-v)
--xml
$ svn log -r 14:15
$ svn log foo.c
$ svn log -r 20 touched.txt 

 

·   svn merge — 应用两组源文件的差别到工作拷贝路径。

将一个分支合并回主干(假定你有一份主干的工作拷贝,分支在修订版本250创建):
$ svn merge -r 250:HEAD http://svn.red-bean.com/repos/branches/my-branch

 

如果你的分支在修订版本23,你希望将主干的修改合并到分支,你可以在你的工作拷贝的分支上这样做: 
$ svn merge -r 23:30 file:///tmp/repos/trunk/vendors

 

合并一个单独文件的修改:
$ cd myproj
$ svn merge -r 30:31 thhgttg.txt 

 

·   svn mkdir — 创建一个纳入版本控制的新目录。

在工作拷贝创建一个目录:
$ svn mkdir newdir
在版本库创建一个目录(立即提交,所以需要日志信息): 
$ svn mkdir -m "Making a new dir." http://svn.red-bean.com/repos/newdir

 

·   svn move — 移动一个文件或目录。

移动工作拷bede一个文件:
$ svn move foo.c bar.c
A         bar.c
D         foo.c
移动版本库中的一个文件(一个立即提交,所以需要提交信息): 
$ svn move -m "Move a file" http://svn.red-bean.com/repos/foo.c /
                            http://svn.red-bean.com/repos/bar.c

 

·   svn resolved — 删除工作拷贝文件或目录的“冲突”状态。

删除工作拷贝文件或目录的“conflicted”状态。这个程序不是语义上的改变冲突标志,它只是删除冲突相关的人造文件,从而重新允许路径提交;也就是说,它告诉Subversion冲突已经“解决了”

例子:

如果你在更新时得到冲突,你的工作拷贝会产生三个新的文件:

$ svn update
C  foo.c
Updated to revision 31.
$ ls
foo.c
foo.c.mine
foo.c.r30
foo.c.r31
当你解决了foo.c的冲突,并且准备提交,运行
svn resolved让你的工作拷贝知道你已经完成了所有事情。 

警告:

你可以仅仅删除冲突的文件并且提交,但是svn resolved除了删除冲突文件,还修正了一些记录在工作拷贝管理区域的记录数据,所以我们推荐你使用这个命令。


 

·   svn revert — 取消所有的本地编辑。

丢弃对一个文件的修改:
$ svn revert foo.c

 

如果你希望恢复一整个目录的文件,可以使用--recursive选项: 
$ svn revert --recursive .

 

·   svn status — 打印工作拷贝文件和目录的状态。

从status子命令能得到的所有信息:
$ svn status --show-updates --verbose filename

 

·   svn switch — 把工作拷贝更新到别的URL。

如果你目前所在目录vendors分支到vendors-with-fix,你希望转移到那个分支: 
$ svn switch http://svn.red-bean.com/repos/branches/vendors-with-fix .
为了跳转回来,只需要提供最初取出工作拷贝的版本库URL: 
$ svn switch http://svn.red-bean.com/repos/trunk/vendors .

 

$ svn switch --relocate file:///tmp/repos file:///tmp/newlocation .
小心使用--relocate选项,如果你输入了错误的选项,你会在工作拷贝创建无意义的URL,会导致整个工作区不可用并且难于修复。理解何时应该使用--relocate也是非常重要的,下面是一些规则: 
  如果工作拷贝需要反映一个版本库的新目录,只需要使用svn switch。 
  如果你的工作拷贝还是反映相同的版本库目录,但是版本库本身的位置改变了,使用svn switch --relocate。

 

·   svn update — 更新你的工作拷贝。

$ svn update
$ svn update -r30

 


 

·   如下是一些Subversion能够接受的日期格式,注意在日期中有空格时需要使用引号

$ svn checkout --revision {2002-02-17}
$ svn checkout --revision {15:30}
$ svn checkout --revision {15:30:00.200000}
$ svn checkout --revision {"2002-02-17 15:30"}
$ svn checkout --revision {"2002-02-17 15:30 +0230"}
$ svn checkout --revision {2002-02-17T15:30}
$ svn checkout --revision {2002-02-17T15:30Z}
$ svn checkout --revision {2002-02-17T15:30-04:00}
$ svn checkout --revision {20020217T1530}
$ svn checkout --revision {20020217T1530Z}
$ svn checkout --revision {20020217T1530-0500}

·   修订版本关键字的使用

$ svn diff --revision PREV:COMMITTED foo.c
# shows the last change committed to foo.c

 

$ svn log --revision HEAD
# shows log message for the latest repository commit

 

$ svn diff --revision HEAD
# compares your working file (with local mods) to the latest version
# in the repository.

 

$ svn diff --revision BASE:HEAD foo.c
# compares your “pristine” foo.c (no local mods) with the 
# latest version in the repository

 

$ svn log --revision BASE:HEAD
# shows all commit logs since you last updated

 

$ svn update --revision PREV foo.c
# rewinds the last change on foo.c.
# (foo.c's working revision is decreased.)

 

$ svn log --revision {2002-11-28}
$ svn log --revision {2002-11-20}:{2002-11-29}

 

参考:



http://svnbook.red-bean.com/ svn-book

http://www.subversion.org.cn/tsvndoc/  TortoiseSVN手册,windows下的一种subversion客户端

 

 

时间: 2024-11-08 21:49:16

Subversion常用操作总结的相关文章

Javascript数组Array的常用操作

文章简介:JavaScript中的数组. Array是JavaScript中常用的类型,并且JavaScript中的数组和其他语言的数组有比较大的区别.JavaScript中数组中存放的数据类型不一定相同,而且数组的长度也是可改变的. 下面记录一下Array的常用操作: 一 新建数组 新建数组可以用一下方法: var obj = ['zdy',22,'湖北武汉','计算机科学与技术'];//创建一个数组变量 var obj1 = new Array('zdy',22,'湖北武汉','计算机科学与

WIN98注册表编辑器的常用操作

注册表 WIN98注册表编辑器的常用操作注册表编辑器是一个可以让你改变系统注册设定的高级工具,有经验的Windows用户可以通过编辑注册表改变系统设定. 启动注册表编辑器的方法是执行Windows文件夹下的REGEDIT.EXE.如果注册表中有错误,计算机可能不能正常运行.如果发生这种情况,可以将注册表信息恢复到上次启动计算机时的状态.下面详细介绍Win98注册表编辑器常用的操作. 一.恢复注册表 1.单击"开始",再单击"关闭系统": 2.单击"重新启动

C#中对DatagridView的部分常用操作

C#中对DatagridView部分常用操作 只列出技巧部分,后面会有补充 0(最基本的技巧). 获取某列中的某行(某单元格)中的内容 this.currentposition = this.dataGridView1.BindingContext [this.dataGridView1.DataSource, this.dataGridView1.DataMember].Position; bookContent = this.database.dataSet.Tables[0].Rows [

python中list常用操作实例详解

  本文实例讲述了python中list常用操作.分享给大家供大家参考.具体分析如下: 1.定义list ? 1 2 3 4 5 6 7 >>> li = ["a", "b", "mpilgrim", "z", "example"] >>> li ['a', 'b', 'mpilgrim', 'z', 'example'] >>> li[0] 'a' &

MongoDB在PHP中的常用操作小结

  本篇文章主要是对MongoDB在PHP中的常用操作进行了详细的总结介绍,需要的朋友可以过来参考下,希望对大家有所帮助 $mongodb = new Mongo(); //$connection = new Mongo( "$dburl:$port" ); // connect to a remote host (default port) $mydb = $mongodb->mydb; //隐性创建数据库mydb $mydb = $mongodb->selectDB(&

php中的mongodb select常用操作代码示例_php实例

前面说到了mongodb安装,配置,集群,以及php的插入与更新等,请参考:mongodb. 下面说一下,mongodb select的常用操作 测试数据: 复制代码 代码如下: { "_id" : 1, "title" : "红楼梦", "auther" : "曹雪芹", "typeColumn" : "test", "money" : 80,

javascript Range对象跨浏览器常用操作第1/2页_javascript技巧

开发的功能主要涉及即时代码着色(CodeColoring)和语法提示(CodeHints)功能,稍后会总结功能开发中问题或提供源码. 以下是个人对Range对象的了解和常用操作的实例和总结: Range对象 Range对象表示文档的连续范围区域,如用户在浏览器窗口中用鼠标拖动选中的区域. dom标准Range对象 http://www.w3school.com.cn/xmldom/dom_range.asp 在ie中使用TextRange对象 http://www.hbcms.com/main/

R语言Data Frame数据框常用操作

Data Frame一般被翻译为数据框,感觉就像是R中的表,由行和列组成,与Matrix不同的是,每个列可以是不同的数据类型,而Matrix是必须相同的. Data Frame每一列有列名,每一行也可以指定行名.如果不指定行名,那么就是从1开始自增的Sequence来标识每一行. 初始化 使用data.frame函数就可以初始化一个Data Frame.比如我们要初始化一个student的Data Frame其中包含ID和Name还有Gender以及Birthdate,那么代码为: studen

JQuery 常用操作代码_jquery

//遍历option和添加.移除option function changeShipMethod(shipping){ var len = $("select[@name=ISHIPTYPE] option").length if(shipping.value != "CA"){ $("select[@name=ISHIPTYPE] option").each(function(){ if($(this).val() == 111){ $(thi