SVN
Contents
目录 start
目录 end|2020-04-27 23:42|
SVN
传统的中心化版本控制工具,能够精确控制每个目录的权限, Apache顶级项目
SVN 官网 | SVN中文网 Subversion 与版本控制 书籍
svn 不能提交单个文件里的部分提交, 要么就整个文件提交, 要么不提交, git则可以
服务端安装
安装 svnadmin
svnadmin使用
参考 建立一个仓库
svnadmin create /yc/svn/rep-ops
备份和恢复
- 备份 svndump /svn/repos > a.dump
- 恢复 svnadmin load /svn/repos < a.dump
远程
- 增量备份
svnrdump dump http://192.168.10.200/svn/test/ --username kuangchengping --password 123456 -r 3:4 --incremental > b4.dump
- 恢复
svnrdump load http://192.168.10.200/svn/test/ --username kuangchengping --password 123456 < b4.dump
客户端安装
Ubuntu
sudo apt install subversion
安装后可使用的命令就是svn
GUI
使用
- 下拉代码
svn co URL
添加文件
svn add filename
, 或者*.java
是添加当前目录下java文件,- 或者 文件夹, 一般使用文件夹好点,也就是src目录
- 强制添加所有文件
svn add * --force
- 将改动的文件提交到版本库
svn ci -m "update"
- 因为是中心化的仓库, 所以提交就是推送到总仓库了, 不像Git那样先提到到本地仓库, 然后推送至远程仓库
- 更新本地代码
svn up
svn update如果后面没有目录,默认将当前目录以及子目录下的所有文件都更新到最新版本
- 删除文件
svn remove|rm path
配置忽略文件
svn:ignore 和 svn:global-ignores
- 作用范围
- svn:ignore:只对当前目录有效;
- global-ignores:是全局有效,就是所有目前都有效;
- 配置方式
- svn:ignore:必须在项目的每个工作目录都要设置;相同配置时,优先级高于全局的
- global-ignores:只需要配置一次;
-
svn propedit svn:ignore 项目文件夹
会打开默认配置, 和gitignore一样的配置, 然后保存即可- 文件夹就是项目, 所以要在项目根目录的上级目录执行这条命令
- 如果上面没有调起编辑器, 就要在 .bashrc 中
export SVN_EDITOR=vim
-
然后提交到仓库( svn co -m “xxx” ), 即可完成 忽略文件的配置, 为了可见性, 一般和.gitignore一样的配置即可
- 导入忽略文件
svn propset -F .svnignore .
- 导入忽略文件
提交
部分提交 参考
- 提交指定文件以及目录
svn ci readme.md src/* -m "1.update readme 2.add src change"
svn ci -m "msg"
提交所有已添加到版本库的操作(新建, 修改, 删除)
查看仓库
svn log | less
这样能更为方便和干净svn cat -r 版本号 文件
输出某个版本的某文件(文件必须在本地存在)svn diff -r 版本号:版本号 文件
对比两个版本的某文件
svn st
处理冲突
冲突的产生: 因为多个开发人员进行修改了同一个文件夹(修改,删除文件夹), 同一个文件.
树冲突
多个开发人员修改了同一个文件夹, 并且一方修改, 一方做了删除
- 标记冲突已解决(使用本地的状态, 本地该文件的状态是Delete, 提交后服务端对应的文件就会被删除)
svn resolve --accept=working file/dir
回滚到指定版本
|
|
Tips
下载Github子目录
- svn co URL
- /tree/master/ 换成 /trunk/
- /tree/master/ 换成 /branches/branchname/
删除认证信息
rm -rf ~/.subversion/auth
- 表现: IDEA 报错 uncongnized character scheme in 2019-01-03_15:25:42.log
- 后果: svn 所有操作都无响应, 相当于 idea的 svn 功能废了
- 解决方案: 直接删除 .svn 目录, svn co 另一个目录, 把那份 .svn 目录拿过来
- 分析: 很有可能文件名, 或者日志内容具有 svn 不认识的编码, 导致的问题
Author Kuangcp
LastMod 2018-11-21