SVN知识集锦
命令格式: svnadmin create 路径 --fs-type fsfs|bdb
具体可以参考:Ubuntu下安装subversion服务器
命令格式:
svn [co|checkout] 协议://版本库路径 /本地路径 [选项] [全局选项]
命令详解:
协议 | 根据版本库的配置不同,可能是svn、http、https等 |
版本库路径 | 版本库往往会有trunk、tag、branches等分支,注意如果你需要签出demo,可能需要定位到demo/trunk |
本地路径 | 可以指定相对(于当前目录的)路径或者绝对路径 |
选项 | -r 需要签出的版本,可以是版本号,或者:
HEAD 最新版本; BASE 当前工作拷贝的版本; COMMITTED 上一次提交的版本; PREV COMMITTED的前一个版本 -q 不打印详细的信息 --depth 限制操作影响的目录深度: empty 仅指定的目录; files 目录和其子文件,不包括子目录; immediates 目录和其直接子文件、直接子目录; infinity 包括所有后代 --force 强制执行,正常使用下,SVN可能会阻止某些操作 --ignore-externals:忽略SVN管理的外部工作拷贝 |
全局选项 | --username: 指定用户名 --password: 指定密码 --no-auth-cache: 不要缓存用于认证的用户密码--non-interactive :不要进行交互式提示 --force-interactive : 强制交互式提示 --trust-server-cert : 信任服务端的证书,不做提示 --config-dir: 从指定的目录读取用户的配置信息 --config-option :以FILE:SECTION:OPTION=[VALUE]的形式设置选项 |
示例:
1 2 3 4 5 6 7 8 |
#签出到当前目录的子目录 svn checkout svn://192.168.1.15/test svntest #签出,并指定用户密码 svn co svn://192.168.1.15/demo ~/projects/demo --username u --password p #非交互式导出,信任服务器证书 svn --non-interactive --no-auth-cache --trust-server-cert --username $SVNUSER --password $SVNPSWD export https://192.168.1.15/demo |
命令格式:svn update [路径] [选项] [全局选项]
对于每一个受影响的文件,都用一个字母来表示对其进行的操作:
A | 新文件,添加到工作拷贝 |
D | 删除工作拷贝的文件 |
U | 更新空座拷贝的文件 |
C | 文件存在冲突,需要处理 |
G | 文件被自动合并 |
命令详解:
路径 | 需要更新的文件或者目录 |
选项 | -r、--depth、-q、--force、--ignore-externals:参考签出命令 --set-depth 设置新的工作拷贝的depth--diff3-cmd 使用参数指定的命令进行文件合并--cl 仅仅操作参数指定的成员 --editor-cmd 指定外部编辑器 --accept 设置自动冲突处理方式: postpone(p) 不做任何处理; edit(e) 打开冲突文件手工处理; launch(l) 打开交互式冲突处理工具; base 使用BASE版本; working 使用工作拷贝版本,假设冲突已经被手工处理; mine-full(mf) 使用本地的修改; theirs-full(tf) 使用更新得到的文件; mine-conflict(mc) 冲突部分使用本地的修改; theirs-conflict(tc) 冲突部分使用更新得到的文件 --parents 创建不存在的父目录 |
全局选项 | 参考签出命令 |
示例:
1 2 |
#更新themes目录到HEAD版本,如果出现冲突,冲突部分替换为我的本地修改 svn update wp-content/themes --accept mc |
命令格式:svn commit [路径] [选项] [全局选项]
命令详解:
路径 | 需要更新的文件或者目录 |
选项 | -r、--depth、-q、--force、--ignore-externals、--cl、--editor-cmd :参考更新命令--targets 将该参数指定的文件的内容,作为额外参数传递
-m 设置提交的日志消息 -F 从文件中读取提交日志消息 --encoding 指定字符集 --with-revprop 使用name[=value]的形式提供即将提交的修订版的属性 --keep-changelists 提交后保留changelists |
全局选项 | 参考签出命令 |
命令 | 说明 | ||
svn status |
打印工作拷贝中文件或者目录的状态 命令格式: svn status 路径 [参数] |
||
svn revert |
还原本地修改 命令格式: svn revert 路径 |
||
svn propset |
设置目录、文件或者修订版的SVN属性 命令格式: svn propset 属性名 属性值 路径 举例:
|
||
svn propedit |
使用外部编辑器编辑SVN属性 命令格式: svn propedit 属性名 |
||
svn proplist | 显示所有SVN属性 | ||
svn propdel |
删除某个SVN属性 命令格式: svn pd 属性名 |
||
svn export |
导出一个未版本化的副本 命令格式: svn export [-r 修订版] 远程路径 本地路径 参数:--native-eol 用于指定换行符,可以是:'LF', 'CR', 'CRLF' |
||
svn import |
导入本地目录到版本库 命令格式: svn import 本地路径 远程URL 如果本地路径不指定,则表示当前目录。注意:本地不会生成.svn目录,本地不会和版本库产生关联 |
||
svn lock |
锁定版本库上的某个路径,避免被别的人修改 命令格式: svn lock 路径 使用 --force可以窃取锁 |
||
svn unlock |
解锁某个路径 命令格式: svn lock 路径 |
||
svn add |
使未版本化的文件纳入版本控制,并在下一次commit时提交到版本库 命令格式: svn add 路径 --auto-props : 启用自动属性 --no-auto-props : 禁用自动属性 举例:
|
||
svn delete |
将指定文件清除出版本控制,并在下一次commit时提交到版本库 命令格式: svn [delete|rm] 路径 |
||
svn copy |
在版本库或者工作拷贝复制文件 命令格式: svn [copy|cp] 源路径 目标路径 |
||
svn move |
在版本库或者工作拷贝移动文件 命令格式: svn [move|mv] 源路径 目标路径 |
||
svn mkdir | 在版本库或者工作拷贝创建目录
命令格式: svn mkdir 路径 |
||
svn log |
显示提交日志 命令格式: svn log 路径 举例:
|
-
手工合并
- 使用上面三个临时文件之一覆盖修改
- svn revert回退本地修改
冲突文件中,使用<<< === >>>这样的符号来对冲突进行标记:
1 2 3 4 5 6 7 8 |
private int name; /*前两段符号圈定的是本地的修改内容*/ <<<<<<< .mine private Date dob; ======= private Date birthDate; >>>>>>> .r2 /*后两段符号圈定的是从版本库更新下来的内容,最后会附加其版本号*/ |
具体的修改需要结合实际工作内容进行。
TortoiseSVN是一个图形化的SVN客户端软件,它使用不同的图标来标记文件的状态:
运行:svn cleanup
Linux下出现此错误,是Locale设置问题,解决办法:
1 |
export LC_ALL=en_US.UTF-8 |
需要添加提交日志: svn commit -m "日志内容"
运行: svn delete ***
1 |
svn add --force * --auto-props --parents --depth infinity -q |
1 |
svn status | grep ^! | awk '{ print " --force " $2"@"}' | xargs svn rm |
之所以在文件名末尾添加@,是因为@是SVN特殊符号,结尾加上@表示将文件名中出现的@作为普通字符看待。
1 2 3 4 5 6 |
## svn:ignore设置 ## #根目录上通常要设置: target .* #如果使用JRebel,则src/main/resources上要设置 rebel.xml |
Leave a Reply