SVN 简单使用方法
1. SVN 数据流![svn 数据流](https://img-blog.csdn.net/20160112092926188)
2. SVN 命令
2.1 基本命令
co [checkout] 远程仓库checkout到本地
up [update] 远程仓库中版本变化更新到本地
ci [commit] 工作目录中文件变化提交到远程仓库
st [status] 工作目录中文件状态
add 将文件纳入版本管理
Note:status 状态
A Added in your working copy
C Conflicted, because of an update or merge
D Deleted in your working copy
G Merged with changes from the repository
I Ignored in your working copy
M Modified in your working copy
R Replaced in your working copy
? Not under version control
! Missing from your
2.2 中级命令
2.2.1 resolve 冲突处理
svn resolve --accept file
resolve
通知svn解决冲突accept
指定解决冲突后的文件file
冲突处理后的文件
2.2.2 diff 文件比较
svn diff main.con
Index: main.conf
===================================================================
--- main.conf (revision 2445)
+++ main.conf (working copy)
@@ -1,4 +1,3 @@
mapid_path=mapid_db
-admin_path=citylist_db
extend_mapid=true
-thread_num=1
+thread_num=3
- index 中版本, + 工作目录中版本。
2.2.3 revert 恢复工作目录
# 恢复单个文件
svn revert main.conf
Reverted 'main.conf'
# 递归恢复整个目录
svn revert . -R
Reverted 'table_reader.cpp'
Reverted 'table.conf'
2.2.4 propedit 属性编辑
ignore 属性用于忽略当前目录中的某些文件,不纳入版本管理。
svn propedit svn:ignore .
*.sh
main
svn ci -m "ADD: filter shell and bin"
2.2.5 log 日志
查看文件
svn log main.conf ------------------------------------------------------------------------ r2425 | chengsun | 2016-01-07 18:08:38 +0800 (Thu, 07 Jan 2016) | 1 line EDIT: all code done. ------------------------------------------------------------------------ r2415 | chengsun | 2016-01-07 16:16:01 +0800 (Thu, 07 Jan 2016) | 1 line ADD: add prog conf ------------------------------------------------------------------------
查看目录
svn log
2.2.6 update vs revert
- update 从remote repository 返回数据。
- revert 从 index 中返回数据。
2.3 高级命令
blame 查看代码负责人
merge 分支合并、版本回退
svn blame mapid.cpp
版本 修改人 代码
-------------
2201 Tom ……
800 Mike ……
802 Mike ……
802 Mike ……
2.4 文件操作
cy [copy] 拷贝文件、创建分支、创建tag
del [delete] 删除、删除分支、删除tag
mv [move] 移动
ls [list] 查看文件
mkdir 创建文件夹
svn list svn list http://bj-scm.tencent.com/hummingbird/kepler_proj/tags
1.0
1.1
list 可以不用 checkout,查看远程仓库文件
2.5 其它命令
2.5.1 changelist 本地文件分组
svn st
A file_info.h
A file_manager.cpp
A file_manager.h
A file_info.cpp
changelist 可以将文件进行本地分组。比如上述四个文件,并不想一起提交,而是希望file_info 与 file_manager 分开。
svn changelist file_manager file_manager.*
svn cahngelist file_manager file_info.*
svn st
--- Changelist 'file_manager':
A file_manager.cpp
A file_manager.h
--- Changelist 'file_info':
A file_info.h
A file_info.cpp
svn ci -m "ADD: add file manager" --cl file_manager
Note: 分组只有本地可见,如果想删除分支,则:
svn changelist –remove –recursive –cl file_info .
2.5.2 export 导出仓库
不同于checkout的是,导出到本地的文件不被svn管理。
svn export http://bj-scm.tencent.com/hummingbird/kepler_proj/trunk map
2.5.3 import 导入仓库
外部导入文件,纳入svn管理。通常用于导入第三方库。
svn import -m "ADD: init import" . \
http://bj-scm.tencent.com/hummingbird/kepler_proj/trunk/third
2.5.4 info 查看svn信息
Path: .
URL: http://bj-scm.tencent.com/hummingbird/kepler_proj/branches
Repository Root: http://bj-scm.tencent.com/hummingbird/kepler_proj
Repository UUID: d0d4e180-543f-11e5-8ec9-a1898dccf2d9
Revision: 2427
Node Kind: directory
Schedule: normal
Last Changed Author: Tom
Last Changed Rev: 2143
Last Changed Date: 2015-12-09 19:56:09 +0800 (Wed, 09 Dec 2015)
3. 分支与合并
3.1 Tag
代码上线,表明有一个稳定的版本,这是需要打tag进行代码存档。
svn up
svn copy . http://bj-scm.tencent.com/hummingbird/kepler_proj/tags/1.0 -m "Create Tag 1.0"
可以通过svn info 查看仓库url地址。
3.2 分支
3.2.1 创建分支
方法一:
cd trunk
svn up
svn copy . http://bj-scm.tencent.com/hummingbird/kepler_proj/branches/fix_bug -m "create br"
cd ../branch
svn up
方法二:
svn copy -m "create br" \
http://bj-scm.tencent.com/hummingbird/kepler_proj/trunk \
http://bj-scm.tencent.com/hummingbird/kepler_proj/branch/fix_bug
svn co http://bj-scm.tencent.com/hummingbird/kepler_proj/
3.2.2 主干合并到分支
cd branch/fix_bug
svn update
svn merge http://bj-scm.tencent.com/hummingbird/kepler_proj/trunk
svn ci -m "merge trunk to branch"
3.2.3 分支合并到主干
cd trunk
svn update
svn merge --reintegrate http://bj-scm.tencent.com/hummingbird/kepler_proj/branch/fix_bug
svn ci -m "Merge branch fix_bug to trunk"
–reintegrate 开发过程中,分支会不停的与主干进行同步(主干到分支),分支上既有独有的修改,也有主干的修改。
在分支到主干的合并过程中,通过指定参数 reintegrate 让svn仅同步分支独有的修改。
3.2.4 总结
分支合并语法: svn merge URL [URL:Merge URL指向路径到当前目录]
3.3 冲突处理
3.4 回退
3.4.1 回退目录
svn update
svn merge -r 500:495 .
svn commit -m "Roll Back From 500 To R495"
svn update 查看当前版本号
3.4.2 回退文件
svn merge -r 1000:300 lock.cpp
svn ci -m "Roll Back"