SVN客户端命令
命令 | 简写 | 含义 |
---|---|---|
svn checkout | svn co | 下载服务器的代码到本地 |
svn commit | svnci | 将改动的文件提交到服务器 |
svn update | svn up | 更新服务器的代码到本地 |
svn add | 向本地的版本控制库中添加新文件 | |
svn delete svn remove | svn del svnrm | 从本地的版本控制库中删除文件 |
svnmove | 移动文件或者目录或文件更名 | |
svnmkdir | 创建纳入版本控制下的新目录 | |
svn revert | 撤销之前的一切修改 | |
svnmerge | 将两个版本之间的差异合并到当前文件 | |
svn info | 查看文件的详细信息 | |
svn diff | 查看不同版本的区别 | |
svn log | 查看日志信息 | |
svn list | 列出版本库下的文件和目录列表 | |
svn status | svnst | 查看文件状态 |
svn help | 获取帮助信息(比如svn help ci) | |
svnlock | 加锁 | |
svnunlock | 解锁 |
检出
将项目检出(下载)至本地
svn checkout URL [PATH] svn co URL [PATH]
注意:这里的中括号[ ]代表可选(可以省略)
示例
svn checkout https://192.168.1.106/svn/Weibo/ /Users/Documents/workspace
- 蓝色URL代表的是:代码仓库的远程地址
- 橙色[PATH]代表的是:将代码下载到本地的哪个路径
- 如果省略橙色的路径,就下载到命令行当前所在的路径
提交
将改动过的文件提交至服务器
svn commit -m "注释" [PATH] svn ci -m "注释" [PATH]
注意:一定要养成写注释的良好习惯
示例
svn commit -m “修改了User.m文件” /Users/Desktop/workspace/Weibo/branches/User.m
橙色[PATH]代表的是:提交哪个文件到服务器
如果省略橙色的路径,就将命令行所在路径中所有改动过的文件提交到服务器
添加
提交一个新建的文件到服务器,需要2个步骤
添加新建的文件到本地的版本控制库中:svn add
提交刚才的添加操作到服务器:svn commit
如果直接提交一个没有添加到本地版本控制库中的文件,会报下面的错误
is not a working copy
向本地的版本控制库中添加一个新文件
svn add [PATH]
示例
svn add /Users/Desktop/workspace/Weibo/branches/User.m
橙色[PATH]代表的是:添加哪个文件到版本控制库中
删除
删除服务器上的某个文件,需要做2个步骤
将文件从本地的版本控制库中移除:svn delete 、svn remove
提交刚才的删除操作到服务器:svn commit
将文件从本地的版本控制库中移除:svn delete PATH
示例
svn delete /Users/Desktop/workspace/Weibo/branches/User.m
橙色代表的是:将哪个文件从版本控制库中移除
更新
将服务器的最新代码更新到本地
svn update [PATH]
示例
svn update /Users/lnj/Desktop/workspace/Weibo/branches/User.m
橙色[PATH]代表的是:更新哪个文件的内容
如果省略橙色的路径,就更新命令行所在路径的所有内容
将文件恢复至某个版本
svn update -r 版本号 [PATH]
svn diff #什么都不加,会坚持本地代码和缓存在本地.svn目录下的信息的不同;信息太多,没啥用处。
svn diff -r 3 #比较你的本地代码和版本号为3的所有文件的不同。
svn diff -r 3 text.c #比较你的本地代码和版本号为3的text.c文件的不同。
svn diff -r 5:6 #比较版本5和版本6之间所有文件的不同。
svn diff -r 5:6 text.c #比较版本5和版本6之间的text.c文件的变化。
svn diff -c 6 test.c #比较版本5和版本6之间的text.c文件的变化。
svn log #什么都不加会显示所有版本commit的日志信息:版本、作者、日期、comment。
svn log -r 4:20 #只看版本4到版本20的日志信息,顺序显示。
svn log -r 20:5 #显示版本20到4之间的日志信息,逆序显示。
svn log test.c #查看文件test.c的日志修改信息。
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://foo.com/svn/trunk/code/ #显示代码目录的日志信息。
svn diff个性化定制
svn配置文件: ~/.subversion/config
修改~/.subversion/config,找到如下配置行:
# diff-cmd = diff_program (diff, gdiff, etc.)
将上面那个脚本的路径添加进去就行,修改为
diff-cmd = /usr/local/bin/diffwrap.sh #绝对路径
这样svn diff命令就会默认使用vimdiff比较文件。
diffwrap.sh文件
#! /bin/bash
# for svn diff: 修改~/.subversion/config,找到如下配置行:
# diff-cmd = diff_program (diff, gdiff, etc.)
# diff-cmd = ~/bin/diffwrap.sh
# 参数大于5时,去掉前5个参数;参数小于5,失败,什么也不做
shift 5
# 使用vimdiff比较
vimdiff "$@"
常见问题总结
流程 | 命令 |
---|---|
第一次使用,下载公司的代码到电脑上 | svn checkout |
修改了某个早已存在的旧文件,然后提交到服务器 | svn commit |
提交一个自己新建的文件到服务器 | svn add --> svn commit |
删除一个早已存在的旧文件,然后同步到服务器上 | svn delete --> svn commit |
将其他同事提交的新代码更新到自己电脑上 | svn update |
不小心写错了很多东西,想撤销所写的东西(还未把修改提交到服务器) | svn revert |
不小心删错了文件,想把文件恢复回来(还未把删除提交到服务器) | svn revert |
不小心写错了很多东西,想撤销所写的东西(已经把修改提交到服务器) |
psvn update -r 版本号|
|不小心删错了文件,想把文件恢复回来(已经把删除提交到服务器)|svn update -r 版本号|
注意
.svn
这个隐藏目录记录着非常关键的信息- 千万不要手工修改或删除这个
.svn
隐藏目录和里面的文件!
否则将会导致本地的工作副本被破坏,无法再进行操作
目录规范
正规项目的SVN目录结构一般有3个文件夹
- trunk:
主干
,当前开发项目的主目录
- branches:
分支
目录,添加非主线功能
时使用,开发测试之后,可以合并到主干项目中
*tags:标记
目录,通常作为重大版本的备份
使用SVN小建议
- 经常更新:降低冲突的可能性
- 提交前需在本机测试通过:降低将问题代码传到版本库
- 提交时一定写备注(注释):方便其他员工查看和自己以后回顾
- 对于不需要提交的文件不要提交到版本库
提示
- 每次修改之前最好先更新
2.每天下班前提交当天运行通过的代码
3.每天上班第一件事情更新前一天的代码