1、检出
1 |
svn checkout(co) svn地址(http或者svn协议) [本地目录] --username 用户名 [--password 密码] |
注:如果不带--password 参数传输密码的话,会提示输入密码,建议不要用明文的--password 选项。
不指定本地目录,则检出到当前目录下。
例如:
1 |
svn checkout http://blog.wanxiaohong.cn/project /project --username suvan |
2、导出( 导出一个干净的不带.svn文件夹的目录树 )
1 2 |
svn export [-r 版本号] svn地址(http或者svn协议) [本地目录] --username 用户名 svn export 本地检出的(即带有.svn文件夹的)目录 要导出的本地目录 |
注:第一种从版本库导出干净工作目录树的形式是指定URL,如果指定了修订版本号,会导出相应的版本,如果没有指定修订版本,则会导出最新的,导出到指定位置。如果省略本地目录,URL的最后一部分会作为本地目录的名字。
第二种形式是指定本地检出的目录,所有的本地修改将会保留,但是不在版本控制下(即没提交的新文件,因为.svn文件夹里没有与之相关的信息记录)的文件不会拷贝。
例如:
1 2 |
svn export -r 168 http://blog.wanxiaohong.cn/project /project --username suvan svn export /project /newproject |
3、添加新文件
1 2 3 |
svn add 文件名 #告知SVN服务器要添加文件了,然后提交文件 svn commint(ci) -m '增加新文件' |
例如:
1 2 3 4 |
svn add new.file svn commit -m '增加新文件' svn add *.file #添加当前目录下所有的.file文件 svn commit -m '增加新文件' |
4、提交
1 2 |
svn commit(ci) -m "提交的备注" [-N] [--no-unlock] 文件名 必须带上-m参数,参数可以为空,但是必须写上-m |
例如:
1 2 3 |
svn commit -m "提交当前目录下的全部在版本控制下的文件" svn commit -m "提交suvan.file" suvan.file svn commit -m "提交suvan.file" -N --no-unlock test.php #保持锁用–no-unlock开关 |
5、更新文件
1 2 |
svn update #在已被版本控制的目录中执行 |
例如:
1 2 3 4 |
svn update #默认将当前目录以及子目录下的所有文件都更新到最新版本 svn update -r 200 suvan.file #将本地版本库中的suvan.file还原到200版本(revision) svn update suvan.file 更新到与服务器版本库相同版本。 #提交的时候若提示冲突,需先 update 修改文件,然后svn resolved,最后再提交commit。 |
6、删除文件
1 2 3 4 |
svn delete(del, remove, rm) svn地址(http或者svn协议) -m "删除备注信息文本" 或 svn delete /本地文件 svn ci -m |
例如:
1 2 3 |
svn delete http://blog.wanxiaohong.cn/suvan.file -m "删除suvan.file" 或 svn delete suvan.file && svn commit -m '删除suvan.file' |
7、加锁/解锁
1 2 |
svn lock -m "加锁备注信息" [--force] 文件名 svn unlock |
例如:
1 2 |
svn lock -m "加锁suvan.file" suvan.file svn unlock suvan.file |
8、比较差异
1 |
svn diff 文件名 |
例如:
1 2 3 |
svn diff suvan.file #将修改的文件与基础版本比较 svn diff -r 200:201 suvan.file #对版本号200和版本号201 比较差异 |
9、查看文件或者目录状态
1 2 3 4 5 |
svn status(stat, st) 目录路径 【?:不在svn的控制中; M:内容被修改;C:发生冲突;】 svn status -v 【第一列:当前版本号,第二列:修改后的版本号,第三列:修改人,第四列:修改的目录或文件】 |
注:svn status、svn diff和 svn revert这三条命令在没有网络的情况下也可执行
10、查看日志
1 |
svn log 文件名 |
可以指定多个 “-c” 或 “-r” 选项 (但是不允许同时使用 “-c” 和 “-r” 选项),以及混合使用前向和后向范围。 使用 -v 时,在日志信息中显示受影响的路径名。 使用 -q 时,不显示日志信息主体 (请注意,它可与 -v 并存)。 每条日志信息只会显示一次,即使指定了此版本涉及到的多个路径。默认日志信息会追溯复制历史;使用 –stop-on-copy 可以关闭这种行为,这可以用来找出分支点。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
有效选项: -r [--revision] ARG : ARG (一些命令也接受ARG1:ARG2范围) 版本参数可以是如下之一: NUMBER 版本号 '{'DATE'} ' 在指定时间以后的版本 ' HEAD ' 版本库中的最新版本 ' BASE ' 工作副本的基线版本 ' COMMITTED ' 最后提交或基线之前 ' PREV ' COMMITTED的前一版本 -q [--quiet] : 不打印信息,或只打印概要信息 -v [--verbose] : 打印附加信息 -g [--use-merge-history] : 从合并历史使用/显示额外信息 -c [--change] ARG : 版本 ARG 引起的改变 –targets ARG : 传递文件 ARG 内容为附件参数 –stop-on-copy : 查看历史不要跨越不同的副本 –incremental : 给予适合串联的输出 –xml : 输出为 XML -l [--limit] ARG : 日值项最大值 –with-all-revprops : 获取所有版本属性 –with-no-revprops : 没有找回版本属性 –with-revprop ARG : 获取版本属性 ARG 全局选项: –username ARG : 指定用户名称 ARG –password ARG : 指定密码 ARG –no-auth-cache : 不要缓存用户认证令牌 –non-interactive : 不要交互提示 –trust-server-cert : 不提示的接受未知的 SSL 服务器证书(只用于选项 “–non-interactive”) –config-dir ARG : 从目录 ARG 读取用户配置文件 –config-option ARG : 以下属格式设置用户配置选项:FILE:SECTION:OPTION=[VALUE] |
例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
svn log #显示所有版本commit的日志信息:版本、作者、日期、comment。 svn log -r 4:20 #只看版本4到版本20的日志信息,顺序显示。 svn log -r 20:5 #显示版本20到4之间的日志信息,逆序显示。 svn log suvan.file #查看文件suvan.file的日志修改信息。 svn log -r 8 -v #显示版本8的详细修改日志,包括修改的所有文件列表信息。 svn log -r 8 -v -q #显示版本8的详细提交日志,不包括comment。 svn log -v -r 88:866 #显示从版本88到版本866之间,当前代码目录下所有变更的详细信息 。 svn log -v dir #查看目录的日志修改信息,需要加v。 svn log http://blog.wanxiaohong.cn/project #显示代码目录的日志信息。 svn log /project -v -l3 #查看最近3个版本日志 svn log -r 18 > suvan.log #将版本18的日志放入文件 或 svn log –incremental -r 18 > suvan.log |
11、查看文件详细信息
1 |
svn info 文件名 |
例如:
1 |
svn info suvan.file |
12、SVN 帮助
1 |
svn help 全部功能选项 |
13、查看版本库下的文件和目录列表
1 2 3 |
svn list svn地址(http或者svn协议) 或 svn list svn本地版本库目录 |
例如:
1 |
svn list /project |
14、版本库中创建新目录
1 |
svn mkdir 目录名 |
例如:
1 2 |
svn mkdir suvan #创建完之后再提交一下,svn commit -m '新建目录suvan' |
15、恢复本地修改
1 2 |
svn revert [--recursive] 文件名 #该命令不会存取网络,并且会解除冲突的状况。但是它不会恢复被删除的目录。 |
例如:
1 |
svn revert suvan.file 放弃对suvan.file的修改 |
16、把工作拷贝更新到别的URL
1 |
svn switch(sw) svn地址(http或者svn协议) 本地目录 |
例如:
1 2 |
svn switch http://blog.wanxiaohong.cn/newproject ./ #当前所在目录分支到http://blog.wanxiaohong.cn/newproject |
17、解决冲突
1 |
svn resolved [本地目录] |
例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
svn update C suvan.file Updated to revision 31. 如果更新时发生冲突,我们的工作拷贝会产生三个新的文件: suvan.file suvan.file.mine suvan.file.r30 suvan.file.r31 当我们解决了suvan.file的冲突,并且准备提交,运行svn resolved让我们的工作拷贝知道我们已经完成了所有事情。 我们也可以仅仅删除冲突的文件并且提交,但是svn resolved除了删除冲突文件,还修正了一些记录在工作拷贝管理区域的记录数据,所以我们推荐使用这个命令。 |
18、不checkout而查看输出特定文件或URL的内容
1 |
svn cat svn地址(http或者svn协议) |
例如:
1 |
svn cat http://blog.wanxiaohong.cn/project/suvan.file |
补充说明:
unix下如果想更换svn的用户名和密码:
- 临时更换
在所有命令下强制加上--username 和--password选项。
例如:
1 |
svn up --username suvan --password 168168 |
2.永久更换
进入 ~/.subversion目录,删除auth/,若担心误删可以先备份
1 |
cd ~/.subversion && rm -rf auth/ |