Subversion常用操作总结

简介: Subversion常用操作总结徐东来,7.26.2007 一、import和checkout使用svn import来导入一个新项目到Subversion的版本库使用svn checkout从版本库取出一个新拷贝 二、 基本工...

Subversion常用操作总结

徐东来,7.26.2007

 

一、 importcheckout

使用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

 

使用范围符号来比较修订版本30003500

$ 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客户端

 

 
目录
相关文章
|
人工智能 运维 NoSQL
云栖大会|多模+一体化,构建更高效的AI应用
在2024年云栖大会「NoSQL数据库」专场,多位知名企业和阿里云瑶池数据库团队的技术专家,共同分享了阿里云Lindorm、Tair、MongoDB和MyBase的最新进展与实践。Tair推出Serverless KV服务,解决性能瓶颈和运维难题;Lindorm助力AI和具身智能时代的多模数据处理;MongoDB云原生化提升开发效率;MyBase One打破云边界,提供云边端一体化服务。这些技术进展和最佳实践,展示了阿里云在NoSQL数据库领域的创新能力和广泛应用前景。
|
7月前
|
SQL 分布式计算 数据处理
Dataphin 数据处理体验评测报告
作为一名软件开发工程师,我通过实际操作Dataphin,体验了从项目创建到数据处理与分析的完整流程。文章详细记录了开通试用、资源准备、离线管道任务开发、周期性计算任务、补数据操作、即席分析及Notebook图表展示等环节。整个过程让我对数仓搭建有了更清晰的认识。Dataphin在团队协作、任务管理及数据分析效率上有显著优势,但也存在优化空间,例如地域绑定提示、批量周期选择等功能可进一步完善。
|
机器学习/深度学习
大模型中的Scaling Law是什么?
【2月更文挑战第9天】大模型中的Scaling Law是什么?
17754 3
大模型中的Scaling Law是什么?
|
存储 Cloud Native 关系型数据库
《Serverless数据库技术研究报告》——一、 Serverless数据库概述——(一)Serverless理念的起源
《Serverless数据库技术研究报告》——一、 Serverless数据库概述——(一)Serverless理念的起源
833 0
|
缓存 Java 程序员
2023年最新无脑安装 Go lang 环境配置并编写、运行、打包第一个 Golang 程序详细步骤,附带图文教程
GO语言也称为Golang,由谷歌出品,随着云计算的发展而不断壮大,近年来,使用GO语言的程序员越来越多,GO程序员一般被称为GOpher。由于博主硬盘空间较为充足,不考虑移动软件安装目录,需要者请自行寻找方法,本文为无脑操作。
612 0
2023年最新无脑安装 Go lang 环境配置并编写、运行、打包第一个 Golang 程序详细步骤,附带图文教程
|
消息中间件 Kafka 测试技术
Kafka、RabbitMQ、RocketMQ发送小消息性能对比
引言 分布式系统中,我们广泛运用消息中间件进行系统间的数据交换,便于异步解耦。现在开源的消息中间件有很多,前段时间我们自家的产品 RocketMQ (MetaQ的内核) 也顺利开源,得到大家的关注。那么,消息中间件性能究竟哪家强? 带着这个疑问,我们中间件测试组对常见的三类消息产品(Kafka、
14721 82
|
测试技术 持续交付 开发工具
在阿里,我们如何管理代码分支?
阿里有很多的研发团队,不同事业部使用的发布流程、分支策略并非整齐划一,但总体上看是比较规整的。其中有一种主流的发布模式以及对应的分支使用方式,称为“AoneFlow”。这套工作模式思路独特,在阿里以外的地方并不多见。本文围绕这些实践,聊一聊分支管理的话题。
34987 61
|
JavaScript
《Vue3实战》 第十章 Element plus指南
《Vue3实战》 第十章 Element plus指南
359 0
备案变更不用再担心中断服务啦!
备案变更不用再担心中断服务啦!
1141 0
备案变更不用再担心中断服务啦!
|
小程序 前端开发 API
微信小程序利用百度api达成植物识别
## 看完本文你可学会: - 如何使用百度智能云 - 如何在微信小程序中去接入百度api,达成植物识别的效果