1.检出(checkout)

命令格式:
svn checkout svn://目录或文件的路径 [本地路径] --username 用户名

$svn checkout svn://mcucode.cn/test --username dachun

参数说明:
1.如果不带--password参数传输密码的话,会提示输入密码,建议不要用明文的--password 选项;
2.不指定本地目录全路径,则检出到当前目录下;
3.checkout命令可以简写为co.


2.导出(export)

命令格式:

svn export [-r 版本号] svn://目录或文件的路径 [本地路径] --username 用户名
svn export 检出的目录路径(本地) 导出目录路径

$svn export svn://mcucode.cn/test --username dachun
$svn export /home/testchk /home/testexp

参数说明

1.可以选择从版本库导出,或者从本地检出的目录中导出;
2.如果指定了版本号,会导出相应的版本,如果没有指定修订版本,则会导出最新的;
3.本地路径,指定位置导出位置,未指定时URL的最后一部分会作为本地目录的名字导出在当前目录;
4.从本地导出时,所有的本地修改将会保留,但是不在版本控制下(即没提交的新文件,因为.svn文件夹里没有与之相关的信息记录)的文件不会拷贝;


3.添加新文件(add)
命令格式:
svn add 文件名

$svn add test.php
$svn commit -m “添加我的测试用test.php“ test.php
$svn add *.php 
$svn commit -m “添加当前目录下所有的php文件“ *.php

注意事项:
添加文件后还需要用svn commint -m命令真实的上传上去!


4.提交(commit)

svn commit -m “提交备注信息文本“ [-N --no-unlock] 文件名

$svn commit -m “提交当前目录下的全部在版本控制下的文件“ *
$svn commit -m “提交我的测试用test.php“ test.php
$svn commit -m “提交我的测试用test.php“ -N --no-unlock test.php

参数说明:
1.必须带上-m参数,参数可以为空(不建议为空),但是必须写上-m;
2.可以用通配符(正则表达式?),*表示全部文件;
3.-–no-unlock保持锁开关;
4.commit命令可简写为ci;


5.更新文件(update)
命令格式:
svn update [-r 修正版本] [文件名]

$svn update
$svn update -r 200 test.cpp
$svn update test.php

参数说明:
1.默认将当前目录以及子目录下的所有文件都更新到最新版本;
2.-r 表示版本回滚到指定版本;
3.如果指定文件名,则只更新指定文件;


6.删除文件(delete)
svn delete svn://目录或文件的路径 -m “删除备注信息文本”

$svn delete test.php 
$svn commit -m “删除测试文件test.php”

删除后记得及时提交


7.加锁/解锁(lock/unlock)

svn lock -m “加锁备注信息文本“ [--force] 文件名
svn unlock 文件名

$svn lock -m “锁定测试用test.php文件“ test.php 
$svn unlock test.php

8.比较差异(diff)
svn diff [-r 修正版本号m:修正版本号n] 文件名

$svn diff test.php
$svn diff -r 200:201 test.php

9.查看文件或者目录状态

svn status [-v] 目录路径/文件名

$svn status PlaneCtrl

不带参数-v时,显示状态(正常状态不显示):
?:不在svn的控制中;
M:内容被修改;
C:发生冲突;              
A:预定加入到版本库;
K:被锁定

$svn status -v PlaneCtrl

带参数-v时             
第一列为文件状态;
第二列显示工作版本号;               
第三和第四列显示最后一次修改的版本号和修改人

注意事项:
1.可以简写为st.
2.svn status、svn diff和 svn revert这三条命令在没有网络的情况下也可以执行的,原因是svn在本地的.svn中保留了本地版本的原始拷贝。


10.查看日志

功能描述:显示文件的所有修改记录,及其版本号的变化
命令格式:svn log 文件名

$svn log test.php

参数说明:
-r num 显示指定版本的修改日志;
-q 简要显示日志
-v 详细显示日志
--limit n 显示最近的N条日志;


11.查看文件详细信息
svn info 文件名

$svn info test.php

12.SVN 帮助
全部功能选项

$svn help

具体功能的说明

$svn help commit

13.查看版本库下的文件和目录列表
svn list svn://目录或文件路径

svn list svn://localhost/test

显示svn://localhost/test目录下的所有属于版本库的文件和目录
该命令可以简写为ls


14.创建纳入版本控制下的新目录

svn mkdir 目录名
svn mkdir -m "新增目录备注文本" svn://目录全路径

$svn mkdir newdir
$svn mkdir -m "Making a new dir." svn://localhost/test/newdir 

添加完子目录后,一定要回到根目录更新一下,不然在该目录下提交文件会提示“提交失败”

$svn update

注意事项:
如果手工在checkout出来的目录里创建了一个新文件夹newsubdir,
再用svn mkdir命令时,SVN会提示错误:

$svn mkdir newsubdir
svn: 尝试用 “svn add”或 “svn add --non-recursive”代替?
svn: 无法创建目录“newsubdir”: 文件已经存在

此时,用如下命令解决:

$svn add --non-recursive newsubdir

在进入这个newsubdir文件夹,用ls -a查看它下面的全部目录与文件,会发现多了:.svn目录,
再用命令

$svn mkdir -m "添newsubdir功能模块文件" svn://localhost/test/newdir/newsubdir 

SVN提示:

svn: File already exists: filesystem '/data/svnroot/test/db', transaction '4541-1', path '/newdir/newsubdir '

15.恢复本地修改
命令格式:
svn revert [--recursive] 文件名

恢复对一个文件的修改

$svn revert test.c 

恢复一整个目录的文件,. 为当前目录

$svn revert --recursive .

注意事项:
本命令不会存取网络,并且会解除冲突的状况。但是它不能恢复被删除的目录。


16.把工作拷贝更新到别的URL
svn switch http://目录路径 本地目录路径

$svn switch http://localhost/test/456 . 

(原为123的分支)当前所在目录分支到localhost/test/456


17.解决冲突
svn resolved [本地目录全路径]

例子:

$ 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除了删除冲突文件,还修正了一些记录在工作拷贝管理区域的记录数据,所以我们推荐你使用这个命令。


18.不checkout而查看输出特定文件或URL的内容

$svn cat http://localhost/test/readme.txt

19.新建一个分支(copy)

从branchA拷贝出一个新分支branchB

$svn copy branchA branchB  -m "make B branch" 

20.合并内容到分支(merge)
把对branchA的修改合并到分支branchB

$svn merge branchA branchB 

SVN数据库迁移
1.数据导出

$svnadmin dump /opt/svndata/repos > ~/repos_backup.dump

注意事项:
可以采用-r参数导出指定版本
-r ver
-r vera:varb
可以用svnlook命令查看最新版本;

2.在目标机上建立新的svn存储库

#svnadmin create /opt/svndata/repos

3.导入存储库数据

#svnadmin load /opt/svndata/repos < ~/repos_backup.dump

注意事项:
1.数据导出导入只能按项目来进行;
2.仅导入/导出数据,不导出配置文件;
3.如果只导出了部分版本,导入时从1开始重新记数版本号;


查看版本库最新版本号

 $svnlook youngest /opt/svndata/repos