搭建svn服务器以及svn常用命令使用方法

前言

开发这几年来,基本都是用的svn客户端管理来管理代码,用过 Versions 和 CornerStone ,很少用命令行,对svn的命令掌握的也不全。我觉得要想在开发这条路上走的更远,熟练的用命令行来管理代码是最基本的技能。用svn命令行管理代码并不复杂,很容易学习,熟练之后会觉得比图形化工具还方便,因为只用键盘就可以操作。最主要是还可以提高逼格。我觉得十分有必要抽一点时间系统的学习一下svn的常用命令。

创建一个本地SVN仓库

为了方便演示svn命令,又不想用自己公司的服务器,可以先搭建一个本地svn服务器。打开终端输入命令:

delimss-MacBook-Pro:~ delims$ svnadmin create ~/svnserver/
delimss-MacBook-Pro:~ delims$ 

svnadmin create [PATH] 是在本地创建一个仓库,此时控制台没有任何输出,我们看看这个目标下生成的文件

delimss-MacBook-Pro:~ delims$ cd ~/svnserver/
delimss-MacBook-Pro:svnserver delims$ ls
README.txt  db      hooks
conf        format      locks

可以看到生成了一堆文件和文件夹,conf文件夹里包含了仓库的配置信息

看下里面有什么

delimss-MacBook-Pro:svnserver delims$ cd conf/
delimss-MacBook-Pro:conf delims$ ls
authz       hooks-env.tmpl  passwd      svnserve.conf

可以看到conf文件夹里包含了4个文件

文件 说明
svnserve.conf 守护进程配置文件
authz 保存了用户名和权限
passwd 保存了用户名的密码
hooks-env.tmpl 钩子脚本环境配置文件

这几个配置文件,有用的代码都是被注释掉的,我们需要手动修改一下,主要是删除注释符号#,其次也会适当做些修改,修改如下:

svnserve.conf

修改前 修改后 说明
[general]
# anon-access = read
# auth-access = write
# password-db = passwd
# authz-db = authz
[general]
anon-access = none
auth-access = write
password-db = passwd
authz-db = authz
anon-access 代表匿名访问权限
赋值给none表示不允许匿名访问
注意:#后面有一个空格也要删除

authz

修改前 修改后 说明
[groups]
# harry_and_sally = harry,sally
# [/foo/bar]
# harry = rw
# * = r
[groups]
harry_and_sally = harry,sally
[/]
&harry_and_sally = rw
* = r
修改这三行,即创建两个用户并组成
一个group,并给予此group所有成员
根目录的读写权限

passwd

修改前 修改后 说明
[users]
# harry = harryssecret
# sally = sallyssecret
[users]
harry = 123
sally = 123
设置用户密码,只是用来演示,
我们就设置一个简单的吧

启动本地svn服务器

配置好以后,我们就启动服务器,键入命令:

delimss-MacBook-Pro:conf delims$ svnserve -d -r ~/svnserver/
delimss-MacBook-Pro:conf delims$ ps -e | grep svn
  974 ??         0:00.00 /Applications/Xcode.app/Contents/Developer/usr/bin/svnserve -d -r /Users/delims/svnserver/
  977 ttys000    0:00.00 grep svn

此时可以看到成功开启了svnserve进程,还可以发现svnserve工具是包含在Xcode中的,不得不感叹,Xcode真是一个百宝囊。

我们随便找个目录把我们本地svn服务器上的仓库拉下来

delimss-MacBook-Pro:temp delims$ svn co svn://localhost
Authentication realm: <svn://localhost:3690> 7a441335-b969-42c4-aa80-56391f894982
Password for 'delims': *****  //输入macOS用户密码

Authentication realm: <svn://localhost:3690> 7a441335-b969-42c4-aa80-56391f894982
Username: harry  //刚才配置的用户名harry
Password for 'harry': ***  //输入我们配置的简单密码123

Checked out revision 0.  //成功检出,版本号为 0

可以看到成功检出了我们本地服务器的仓库并放在了本地。。。

svn命令行操作

我们先来添加一个文件并提交到服务器

delimss-MacBook-Pro:temp delims$ echo 1 > 1.txt  //添加一个文件
delimss-MacBook-Pro:temp delims$ ls
1.txt  //文件添加了
delimss-MacBook-Pro:temp delims$ svn st 
?       1.txt  //可以看到此文件的状态是?,也就是还没有加入到版本控制
delimss-MacBook-Pro:temp delims$ svn add 1.txt //加入到版本控制
A         1.txt //状态变为A,表示已经加入到了版本控制

//提交到服务器,并添加注释
delimss-MacBook-Pro:temp delims$ svn ci 1.txt -m "提交第一个文件" 
Adding         1.txt  
Transmitting file data .done
Committing transaction...
Committed revision 1. //已成功上传到服务器,版本号+1

为了更好的演示,我将AFNetworking的源码放到根目录

delimss-MacBook-Pro:temp delims$ ls
1.txt       AFNetworking
delimss-MacBook-Pro:temp delims$ svn st
?       AFNetworking  //可以看到AFNetworking还没有加入版本控制
delimss-MacBook-Pro:temp delims$ svn add AFNetworking/ \\添加上
这句命令执行完会显示有大量的被添加记录,下面提交到服务器
delimss-MacBook-Pro:temp delims$ svn ci AFNetworking -m "添加AFNetworking"
这句命令执行完后,最后面会显示,说明一已经成功上传到服务器,版本号是2
Transmitting file data ..................................................................................................................................................................................................................................done
Committing transaction...
Committed revision 2.

delimss-MacBook-Pro:temp delims$ svn st  //查看状态,没有任何输出,表示当前没有文件变动
delimss-MacBook-Pro:temp delims$ svn info //查看当前svn信息,发现版本号依然是0
Path: .
Working Copy Root Path: /Users/delims/temp
URL: svn://localhost
Relative URL: ^/
Repository Root: svn://localhost
Repository UUID: 7a441335-b969-42c4-aa80-56391f894982
Revision: 0
Node Kind: directory
Schedule: normal
Last Changed Rev: 0
Last Changed Date: 2018-08-17 09:59:13 +0800 (Fri, 17 Aug 2018)

更新一下代码

delimss-MacBook-Pro:temp delims$ svn update  //更新一下svn
Updating '.':
At revision 2.
delimss-MacBook-Pro:temp delims$ svn info
Path: .
Working Copy Root Path: /Users/delims/temp
URL: svn://localhost
Relative URL: ^/
Repository Root: svn://localhost
Repository UUID: 7a441335-b969-42c4-aa80-56391f894982
Revision: 2
Node Kind: directory
Schedule: normal
Last Changed Author: harry
Last Changed Rev: 2
Last Changed Date: 2018-08-17 12:55:56 +0800 (Fri, 17 Aug 2018)

查看一下svn 提交记录

delimss-MacBook-Pro:temp delims$ svn log
------------------------------------------------------------------------
r2 | harry | 2018-08-17 12:55:56 +0800 (Fri, 17 Aug 2018) | 1 line

添加AFNetworking
------------------------------------------------------------------------
r1 | harry | 2018-08-17 11:44:12 +0800 (Fri, 17 Aug 2018) | 1 line

提交第一个文件
------------------------------------------------------------------------

PS: 这个命令是查看当前仓库所有文件的所有提交记录,如果只是查看某个文件的记录就这样

delimss-MacBook-Pro:temp delims$ svn log 1.txt 
------------------------------------------------------------------------
r1 | harry | 2018-08-17 11:44:12 +0800 (Fri, 17 Aug 2018) | 1 line

提交第一个文件
------------------------------------------------------------------------

如果只查看最近的几条记录就这样

delimss-MacBook-Pro:temp delims$ svn log -l 1  //查看最近的1条记录
------------------------------------------------------------------------
r2 | harry | 2018-08-17 12:55:56 +0800 (Fri, 17 Aug 2018) | 1 line

添加AFNetworking
------------------------------------------------------------------------

当前版本是2,如果我要回到版本1.就这样

delimss-MacBook-Pro:temp delims$ svn update -r 1 //指定版本号
Updating '.':
D    AFNetworking
Updated to revision 1.
delimss-MacBook-Pro:temp delims$ ls
1.txt  //已经回到版本1

浏览服务器上的文件可以这样操作

delimss-MacBook-Pro:temp delims$ svn list svn://localhost
1.txt
AFNetworking/
delimss-MacBook-Pro:temp delims$ svn list svn://localhost/AFNetworking
.cocoadocs.yml
.git/
.gitignore
.travis.yml
AFNetworking/
AFNetworking.podspec
AFNetworking.xcodeproj/
AFNetworking.xcworkspace/
CHANGELOG.md
CONTRIBUTING.md
Example/
Framework/
LICENSE
README.md
Tests/
UIKit+AFNetworking/
fastlane/
delimss-MacBook-Pro:temp delims$ 

创建一个新分支

delimss-MacBook-Pro:temp delims$ svn copy svn://localhost/AFNetworking svn://localhost/AFNetworking2 -m "创建一个新分支"
Committing transaction...
Committed revision 3.  

再来看下服务器上的目录

delimss-MacBook-Pro:temp delims$ svn list svn://localhost
1.txt
AFNetworking/
AFNetworking2/

可以看到服务器上的目录已经被更改了

更新本地,

delimss-MacBook-Pro:temp delims$ svn update
这里会输出大量日志
delimss-MacBook-Pro:temp delims$ ls 
1.txt       AFNetworking    AFNetworking2

可以看到本地文件和服务器同步了
修改文件

delimss-MacBook-Pro:temp delims$ svn st
M       AFNetworking/README.md
delimss-MacBook-Pro:temp delims$ svn ci AFNetworking/README.md -m "修改一个文件" 
Sending        AFNetworking/README.md
Transmitting file data .done
Committing transaction...
Committed revision 4.

先介绍这些吧

键入svn help查看svn所有命令,打印如下:

   add <br>
   auth <br>
   blame (praise, annotate, ann) <br>
   cat <br>
   changelist (cl) <br>
   checkout (co) <br>
   cleanup <br>
   commit (ci) <br>
   copy (cp) <br>
   delete (del, remove, rm) <br>
   diff (di) <br>
   export <br>
   help (?, h) <br>
   import <br>
   info <br>
   list (ls) <br>
   lock <br>
   log <br>
   merge <br>
   mergeinfo <br>
   mkdir <br>
   move (mv, rename, ren) <br>
   patch <br>
   propdel (pdel, pd) <br>
   propedit (pedit, pe) <br>
   propget (pget, pg) <br>
   proplist (plist, pl) <br>
   propset (pset, ps) <br>
   relocate <br>
   resolve <br>
   resolved <br>
   revert <br>
   status (stat, st) <br>
   switch (sw) <br>
   unlock <br>
   update (up) <br>
   upgrade <br>
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,179评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,229评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,032评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,533评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,531评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,539评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,916评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,813评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,568评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,654评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,354评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,937评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,918评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,152评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,852评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,378评论 2 342

推荐阅读更多精彩内容