SVN 基础记录

2018-09-13 10:56:40 浏览数 (1)

@(版本控制)[svn]

前言

毕业后在 mz 版本控制一直用 git, 这段时间换到 tx, 使用的 svn,开始还是有些不习惯。 所以整理记录下 svn 的一些基本使用,方便工作。

准备

同 git 简单对比

svn 全名 subversion, 使用服务端-客户端结构,不同于 git 的分布式,svn 提交修改获取版本记录信息等操作都需要连接到服务器。当然 git 也有一个集中的版本库,但是每台机器上克隆了一个自己的版本库,拥有所有版本信息,实际开发都是先提交到自己的版本库,再推到集中版本库。 在 svn 中,分支是一个完整的目录,相对于 trunk (svn 主分支目录名), 这个目录拥有实际的目录文件。git 的分支简单很多,在实际开发不同特性,我觉得挺方便的。

安装

ubuntu 下安装

代码语言:javascript复制
$ sudo apt-get install subversion subversion-tools

创建仓库

这个操作日常比较少。

代码语言:javascript复制

日常命令

checkout(co) 检出

和 git checkout 一样, 检出代码库到本地

代码语言:javascript复制
$ svn co svn_repor_path  local_path --username xxx --password sss
$ svn co http:192.168.1.2/test/trunk --username orient
export 导出

导出一个不带 .svn 文件夹的干净目录, 命令格式和 checkout 差不多,如果不指定版本号,默认导出最新

代码语言:javascript复制
$ svn export [-r 版本号] svn_repor_path local_patch --username xx
add 添加文件

新加入文件到版本库追踪,之后 commit 提交到版本库服务器

代码语言:javascript复制
$ svn add file_name
commit(ci) 提交

将改动文件提交到版本库,

代码语言:javascript复制
$ svn commit  -m "msg" file1 dir1 file2...
delete(del) 和 remove(rm) 删除
  1. delete 命令用于删除文件,不再追踪
代码语言:javascript复制
$ svn del test.c
$ svn ci -m "del test.c"
  1. remove 命令用于删除分支
update(up) 更新本地仓库

获取服务器版本库更新到本地

代码语言:javascript复制
$ svn update  #目录下所有文件更新到最新
$ svn update -r 120 test.c # test.c 还原到 revision 120

提交代码的时候提示过期冲突,需要先 update 修改的文件, 清除 svnresolved,在 commit。

svn 下修改了文件后想要清除掉,一般做法可以直接把修改的文件删除,然后执行 up 恢复原来的文件。或者使用 revert 实现

lock/unlock 加锁解锁

为了保证自己修改文件的时候不会被别人修改,带来冲突覆盖的问题,可以使用加锁功能。

代码语言:javascript复制
$ svn lock -m "备注信息" [--forec] file_name
$ svn unlock file_name
diff 比较差异

用于比对文件与库版本的差别

代码语言:javascript复制
$ svn diff file_name # 当前文件同基础版本比较
$ svn diff -r m:n file_name # 比对 版本 n 和 m 的差异
status 查看状态

查看目录下文件的状态, M:修改了的文件 ?不存在控制中,需要删除或者添加, C:有冲突 A:新增 K:锁定 详细状态标记

代码语言:javascript复制
$ svn status
log 查看日志

查看提交的日志

代码语言:javascript复制
$ svn log  # 查看所有提交日志
$ svn log file # 查看指定对象提交日志
$ svn log -l n # 查看最后 n 条提交日志
info 查看信息

查看信息

代码语言:javascript复制
$ svn info [path_name]
revert 恢复到上个版本

此命令将本地修改删除,回退到原始未改变的文件

代码语言:javascript复制
$ svn revert test.c
$ svn revert --recursive ./ # 回退目录下所有文件

注意,执行该操作,无法恢复被删除的目录

resolved 解决冲突

当尝试提交时发生冲突,冲突文件会对应多个副本, file.mine, file.otehr_rev... 解决冲突后,运行下 svn resolved,删除冲突文件,修正版本库数据记录。

cp 创建新的分支

用于创建新分支

代码语言:javascript复制
$ svn svn:xxxx_/trunk svn:xxxx_/branch/xxx -m "从trunk 创建分支 xxx"
merge 合并

合并不同版本文件,分支

代码语言:javascript复制
$ svn merge -r m:n file_name # 将合并文件版本 m 和 n 差异到当前文件
$ svn merge svn:/xxxx svn:/aaa # 合并分支
switch 变更 URL

改变了提交的目录库

代码语言:javascript复制
svn switch new_url

参考

1.svn book

0 人点赞