// 本文为笔者本人在使用svn进行代码库管理时的学习笔记,仅用于本人纪录回顾,如有错误,欢迎指正
1、svn结构介绍
SVN是集中式版本控制系统,版本库是集中放在中央服务器的,首先要从中央服务器得到最新版本。集中式版本控制系统是必须联网才能工作。
2、常见svn命令
- 遇事不决
svn --help
- 检出仓库
svn checkout <repository_url> 或 svn co <repository_url>
- 查看状态
svn status 或 svn st
- 更新当前工作副本
svn update 或 svn up
- 提交更改
svn commit -m "commit_info"
或
svn ci -m "commit_info"
- 添加新文件
svn add <file_name>
- 删除文件
svn delete <file> 或 svn rm <file>
svn commit -m "commit_info"
- 查看日志
svn log
- 查看差异
svn diff 或 svn di
3、基本流程
(1)添加/删除/修改文件
1. 常规增删提交
svn进行文件的增删查改工作与git不同,svn没有所谓的工作区、暂存区、本地仓库等,在本地进行的修改,通过svn命令直接一键提交到远程仓库,因此要更加注意每次的提交。
基本流程如下:
## 检出仓库至本地
svn co <repository_url> .
## 在本地进行修改之后,查看状态
svn st
## ! 表示文件删除,需要svn add
## ? 表示新增文件,需要svn rm
## M 表示修改文件,不需要额外操作
## 更新文件的修改至库中
## 添加文件,之后再svn status显示为“A”
svn add <file>
## 删除文件,之后再svn status显示为“D”
svn delete <file> 或 svn rm <file>
## 提交修改
svn ci -m "commit_info"
注意:添加/删除文件需要使用add/rm,这只会将增加删除的标记打到本地副本中,之后还是要进行svn ci才会提交至远程库。文件修改不需要额外操作,直接svn ci即可
svn ci会将当前工作副本的所有文件变动一并提交!
2. 强制添加
如果新增的文件想一并add,使用一下命令,可以使当前目录下的所有新增文件一并add
svn add .
注意在add的时候,可能会提示某些文件“already under version control”,表示某些文件或目录已经在版本控制之下,不允许重复添加已经在版本控制中的文件或目录。需要使用:
svn add --force .
svn commit -m "your_comments"
强制添加,需注意自己的修改是否符合预期!
3. 批量删除
如果对库中多个文件进行了删除操作,想要将这些文件的删除批量提交到远程库中。使用以下命令:
svn status | grep '^!' | awk '{print $2}' | xargs svn delete
svn commit -m "your_comments"
即查找svn status中的“!”类型文件,提取文件路径,执行svn delete
(2)查看log(附加命令学习)
svn中的命令还会有跟多附加参数,多个参数可叠加使用,以svn log查看更新历史为例
## 查看历史,这会按顺序打印所有更新历史
svn log
## 限制打印条数(limit)
svn log -l <num>
## 查看指定文件的修改历史
svn log <file_or_dir> -l <num>
## 查看指定版本范围内的修改
svn log -r <start_revision>:<end_revision>
## 查看指定日期范围内的历史
svn log -r {<start_date>}:{<end_date>}
## 查看详细的提交日志(verbise)
svn log -v
## 查看特定的变更集
svn log -c <rev_num>
## 查看每个日志条目的差异
svn log --diff
## 查找
svn log --search "search_info"
## 多个关键字查找
svn log --search-and "search" "info"
## 以xml格式输出日志
svn log --xml
## 仅显示日志,不显示注释等(quiet)
svn log-q
注意,以上参数可以多个组合使用,从而让你更精确的找到你想要的信息,以下示例:
- 查看某一个文件最近的更改日志
svn log fle_name -l 3
- 查看某一次提交编号中更改了那些文件
svn log -c 150 -v
- 查看某一次提交编号中某一文件更改了什么内容
svn log -c 150 --diff file_name
其他命令也可以添加附加参数:
svn up -c 150 ## 更新到指定版本
svn status -v ## 显示详细信息
svn status -u 或 svn status --show-updates ## 显示远程仓库更新状态
svn diff -c 150 ## 比较特定的变更集
svn diff -r 100:200 或 --revision ## 指定比较的版本范围
(3)撤销修改
1. 本地撤销
本地修改的文件,想要撤销与远程仓库一致,使用:
svn revert -R path/to/your/folder
2. 撤销远程提交
要撤销 SVN 提交,可以使用 svn merge 命令将特定的提交版本回滚。但这样并不会删除掉你的提交历史,只能添加一个新的历史。因此使用svn提交时一定要谨慎。
以下是具体步骤:
- 查看日志,找到要撤销的版本号
svn log
- 合并回滚提交
svn merge -c -150
- 提交回滚的更改
svn commit -c "撤销版本150的修改"
svn merge 用于将一个分支的更改合并到另一个分支,或者将特定的更改应用到当前工作副本。如果合并过程中对同一部分内容都有修改,需要手动更改这里的冲突。
## 合并分支:将branch1的更改合并到当前工作副本
svn merghe ^/branches/branch1
## 合并特定版本:将r150合并到当前工作副本
svn merge -c 150
## 撤销特定的修订版本:将150的更改反向应用到当前副本
svn merge -c -150
4、附录
- svn status
以下是svn status时显示的文件类型含义:
- A:添加(Added)
- D:删除(Deleted)
- M:修改(Modified)
- R:替换(Replaced)
- C:冲突(Conflict)
- X:外部定义(External definition)
- I:忽略(Ignored)
- ?:未版本控制(Unversioned)
- !:丢失(Missing)
- ~:类型不匹配(Type mismatch)
- L:锁定(Locked)