搭建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:  7a441335-b969-42c4-aa80-56391f894982
Password for 'delims': *****  //输入macOS用户密码

Authentication realm:  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 
auth
blame (praise, annotate, ann)
cat
changelist (cl)
checkout (co)
cleanup
commit (ci)
copy (cp)
delete (del, remove, rm)
diff (di)
export
help (?, h)
import
info
list (ls)
lock
log
merge
mergeinfo
mkdir
move (mv, rename, ren)
patch
propdel (pdel, pd)
propedit (pedit, pe)
propget (pget, pg)
proplist (plist, pl)
propset (pset, ps)
relocate
resolve
resolved
revert
status (stat, st)
switch (sw)
unlock
update (up)
upgrade

你可能感兴趣的:(搭建svn服务器以及svn常用命令使用方法)