SVN基础用法

本文来自个人博客 sunyongfeng.com。博客的文章保持更新,此文可能不是最新状态。

svn - Subversion command line client tool

这里讲SVN命令行客户端工具如何使用,不涉及SVN服务器如何部署。

创建新分支

svn copy src_url [-r version] dst_url [-m "message"] [--username your_name --password your_password]

如果不带-r version,则默认使用src_url的最新版本。version为数字,版本号。
建议所有含提交功能的命令都要带-m message,这样才能通过log直接明了地看出这个版本提交了什么修订。

下载代码

svn checkout url -r version

从服务器仓库下载代码到本地,成为本地工作副本。

升级到新版本

svn update -r version

查看工作副本状态

svn status

第一列表示文件的状态:

  • ,没有修订
  • A,添加
  • C,冲突,需要解决冲突状态,才能正常提交代码。
  • D,删除
  • I,忽略
  • M,有修改
  • ?,没有版本控制,在工作副本添加文件或目录之后,需要使用svn add your_path才能加该文件加到版本控制。
  • !,文件丢失,如果不是使用svn delete删除文件或目录,会产生此状态。

添加新文件或目录到版本控制

svn add file1 file2 ...
svn add dir ...  

使用Linux命令或在窗口下添加文件或目录后,需要使用本命令,才能将添加的文件或目录加入版本控制,svn提交时才能将该文件或目录提交到服务器。

删除文件或目录

svn delete your_path

如果仅仅是手动使用rm命令或窗口下删除工作副本内的文件或目录,该删除并不会记录svn的状态。可能会导致提交代码时,遗漏了删除文件或目录。因此建议删除svn工作副本内的文件或目录时,使用本命令进行操作。

重命名文件或目录

svn move src dst

问题svn move重命名文件之后,再用svn diff打patch会发现只能打进删除文件的补丁,没有新增文件的内容,目前还不清楚svn move要如何打patch。例如:

sunnogo@a3e420:~/src/test$ svn status
sunnogo@a3e420:~/src/test$ svn mv my.spec tmp.spec
A         tmp.spec
D         my.spec
sunnogo@a3e420:~/src/test$ svn status
D       my.spec
        > moved to tmp.spec
A  +    tmp.spec
        > moved from my.spec
sunnogo@a3e420:~/src/test$ svn diff
Index: my.spec
===================================================================
--- my.spec     (revision 11706)
+++ my.spec     (working copy)
@@ -1,27 +0,0 @@
-#ʹ����ȷ�������滻�ļ��а����ַ�'X'�ĵط�
-
-Summary: my packages
- 此处省略N行。
-%attr(755,root,root)
-/*
sunnogo@a3e420:~/src/test$ 

查看工作副本信息

svn info

能够查看到本工作副本的url、版本等信息。

生成patch

svn diff [file_list]

将工作副本的修订以patch的形式输出,常使用svn diff > your_patch.patch输出patch。

打某个版本的patch

svn diff -r ver1:ver2 [file_list]

查看某两个版本中的修订,如果ver1大于ver2,则所输出的diff是回退代码的patch;如果ver2大于ver1,则所输出的patch是合并代码的patch。

应用补丁

svn patch your_patch.patch

提交代码

svn commit [-m message] [file_list]

如果没有带文件列表,则把工作副本的所有修订都提交,如果有带文件列表,则只提交文件列表中对应文件的修订。

合并代码

svn merge -r ver1:ver2 src_url working_copy_path

可将任意版本的任意修订合并到工作副本中。如果ver1小于ver2,表示合并src_url分支ver1到ver2的修订到本地工作副本;如果ver1大于ver2,表示回退修订

另外也可以操作服务器仓库,把working_copy_path直接换成目的分支的url即可,但是这种做法比较危险,不建议新手直接使用。

注意svn merge后的commit需要user同时拥有源分支和目的分支的权限才能提交。

回退工作副本的修订

svn revert file1 file2 ...
svn revert -R dir

查看log

svn log [OPTIONS] [FILE_LIST]

会默认输出所有的log,不实用,需要使用参数过滤才能得到我们想要的内容。
默认只查看工作副本及以前版本的log。

常用参数

  • -l n,只输出n个log信息;
  • -v,显示修订的文件,默认不显示;
  • -r ver,显示特定版本的log;
  • -r ver1:ver2,显示版本ver1到ver2之间所有提交的log;
  • -r {2013-01-01}:{2013-01-11},显示日期间所有提交的log,-r选项的版本号和日期可以混用;
  • --diff,除显示log信息外,还直接输出修订的内容;
  • --search,根据当前输出的log信息,按关键字过滤log,该关键字可以匹配输出信息的任意字符串,比如可匹配到提交者、提交的log信息,如果带-v选项还可以匹配到修订的文件等。
  • --stop-on-copy,只显示当前分支的修订的log,不会回溯源基线分支修订的log。比如分支branch基于tags分支版本100创建,此时branch分支的svn log会默认显示tags分支版本100以前所有修订的log,而如果带上本选项,则只会显示branch分支自己修订的log。

svn版本信息导入execl表

方法来自stackoverflow

Use the following Subversion command to create an xml file out of the repository's log:

  1. svn log -v --xml > repository_log.xml,还可以根据需求配搭其他的svn log选项。
  2. Import the xml file into an Excel spreadsheet (not sure if it will work with LibreOffice/OpenOffice).
  3. You can then save it as a spreadsheet.
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343

推荐阅读更多精彩内容

  • 命令的使用 1、检出 svn cohttp://路径(目录或文件的全路径)[本地目录全路径] --username...
    小李龍彪阅读 4,420评论 0 9
  • iOS 开发 SVN 版本控制器 更多技术交流请加群 iOS技术联盟 27512466 SVN是Subversio...
    Sunny_Fight阅读 8,746评论 7 63
  • 一切比想象的糟糕多了 我们都在继续烦恼 在不同的大陆上 孤岛上 在南半球的上海的老娘们 在南方的上海的看大丈夫 在...
    薄荷摩卡阅读 206评论 0 2
  • 如果你以为我很高兴 其实你不懂我的心 我只是张大了嘴巴 闭上了眼睛 一个呵欠 一阵走神 都被你们说成了高兴 其实我...
    平天下之文世界阅读 167评论 4 8
  • 水调歌头•枫叶裹湿落 ——丁酉中秋夜,阴雨绵绵,无法赏月,顿生愁绪,随作记之,兼怀故友。 枫叶裹湿落,寂寂度中秋。...
    九一之春阅读 228评论 0 0