@(版本控制)[svn]
前言
毕业后在 mz 版本控制一直用 git, 这段时间换到 tx, 使用的 svn,开始还是有些不习惯。
所以整理记录下 svn 的一些基本使用,方便工作。
准备
同 git 简单对比
svn 全名 subversion, 使用服务端-客户端结构,不同于 git 的分布式,svn 提交修改获取版本记录信息等操作都需要连接到服务器。当然 git 也有一个集中的版本库,但是每台机器上克隆了一个自己的版本库,拥有所有版本信息,实际开发都是先提交到自己的版本库,再推到集中版本库。
在 svn 中,分支是一个完整的目录,相对于 trunk (svn 主分支目录名), 这个目录拥有实际的目录文件。git 的分支简单很多,在实际开发不同特性,我觉得挺方便的。
安装
ubuntu 下安装
$ sudo apt-get install subversion subversion-tools
创建仓库
这个操作日常比较少。
日常命令
checkout(co) 检出 和 git checkout 一样, 检出代码库到本地
$ svn co svn_repor_pathlocal_path --username xxx --password sss
$ svn co http:192.168.1.2/test/trunk --username orient
export 导出 导出一个不带 .svn 文件夹的干净目录, 命令格式和 checkout 差不多,如果不指定版本号,默认导出最新
$ svn export [-r 版本号] svn_repor_path local_patch --username xx
add 添加文件 新加入文件到版本库追踪,之后 commit 提交到版本库服务器
$ svn add file_name
commit(ci) 提交 将改动文件提交到版本库,
$ svn commit-m "msg" file1 dir1 file2...
delete(del) 和 remove(rm) 删除
- delete 命令用于删除文件,不再追踪
$ svn del test.c
$ svn ci -m "del test.c"
- remove 命令用于删除分支
$ svn update#目录下所有文件更新到最新
$ svn update -r 120 test.c # test.c 还原到 revision 120
提交代码的时候提示过期冲突,需要先 update 修改的文件, 清除 svnresolved,在 commit。
svn 下修改了文件后想要清除掉,一般做法可以直接把修改的文件删除,然后执行 up 恢复原来的文件。或者使用 revert 实现lock/unlock 加锁解锁 为了保证自己修改文件的时候不会被别人修改,带来冲突覆盖的问题,可以使用加锁功能。
$ svn lock -m "备注信息" [--forec] file_name
$ svn unlock file_name
diff 比较差异 用于比对文件与库版本的差别
$ svn diff file_name # 当前文件同基础版本比较
$ svn diff -r m:n file_name # 比对 版本 n 和 m 的差异
status 查看状态 查看目录下文件的状态,
M:修改了的文件
?不存在控制中,需要删除或者添加,
C:有冲突
A:新增
K:锁定
详细状态标记
$ svn status
log 查看日志 查看提交的日志
$ svn log# 查看所有提交日志
$ svn log file # 查看指定对象提交日志
$ svn log -l n # 查看最后 n 条提交日志
info 查看信息 查看信息
$ svn info [path_name]
revert 恢复到上个版本 此命令将本地修改删除,回退到原始未改变的文件
$ svn revert test.c
$ svn revert --recursive ./ # 回退目录下所有文件
注意,执行该操作,无法恢复被删除的目录
resolved 解决冲突 【SVN|SVN 基础记录】当尝试提交时发生冲突,冲突文件会对应多个副本, file.mine, file.otehr_rev...
解决冲突后,运行下
svn resolved
,删除冲突文件,修正版本库数据记录。cp 创建新的分支 用于创建新分支
$ svn svn:xxxx_/trunk svn:xxxx_/branch/xxx -m "从trunk 创建分支 xxx"
merge 合并 合并不同版本文件,分支
$ svn merge -r m:n file_name # 将合并文件版本 m 和 n 差异到当前文件
$ svn merge svn:/xxxx svn:/aaa # 合并分支
switch 变更 URL 改变了提交的目录库
svn switch new_url
参考 1.svn book