SVN 版本控制
引言
版本控制源代码管理工具:CVS 、 SVN(集中式) 、Git(分布式), .svn 文件被隐藏。
Subversion is a version control system, which allows you to keep old versions of files and directories (usually source code), keep a log of who, when, and why changes occurred, etc., like CVS, RCS or SCCS. Subversion keeps a single copy of the master sources. This copy is called the source
repository’’; it contains all the information to permit extracting previous versions of those files at any time. For more information about the Subversion project, visit http://subversion.apache.org.
Documentation for Subversion and its tools, including detailed usage explanations of the svn, svnadmin, svnserve and svnlook programs, historical background, philosophical approaches and reasonings, etc., can be found at http://svnbook.red-bean.com/.
Run `svn help’ to access the built-in tool documentation.
仓库结构
一般的项目中有 3 个文件夹(trunk、branches、tags),每个文件夹都有自己的分工。
trunk(主干): 当前开发程序的版本
branches(分支): 备份应用程序版本,解决 bug
tags: 重大版本的备份。可以利用 merge 功能合并修复后的功能
Server
请在自己熟练的平台上搭建 SVN 服务器,能够轻松上手。
Windows
在 Windows 上使用最多的 SVN 服务器软件:Visual SVN Server
Mac
0、创建一个名为 project 的文件夹1
$ mkdir project
1、接着在 project 目录下创建一个名为 myproject 的仓库,project 文件夹可存储多个仓库1
$ svnadmin create ~/路径/project/myproject
2、国内为开发者提供代码托管仓库的网站 Coding.net 、OSChina码云、CODE CSDN
命令行
命令心法:1
2
3
4
5$ svn command [options] [args] // 命令样式
$ svn --help // 查看所有命令
$ svn help update //获取特定命令的用法
$ svn log [特定文件名] // svn log fileName@version
$ svn status
0、从本地导入代码到 Server 端(注:第一次导入为初始化)1
$ svn import 路径/myproject svn://IP(domain)/project/myproject --username=itao --password=itao -m "初始化导入(注释)"
1、使用 SVN 下载代码1
2//svn checkout (repo) --username=userName --password=passwd
$ svn checkout svn服务器上文件路径 账号名 密码 [本地存储路径]
2、提交代码(先定位到修改代码的位置)1
2$ svn add devhitao.m //文件名 or add .
$ svn commit -m "提交信息" [文件路径]
3、更新(先定位到本地路径,也就是checkout代码存放的位置)1
$ svn update //将最新服务器版本更新到本地
4、出现代码冲突,开发者需要协商,合并,还是保留某一方的代码,冲突解决完,告诉 svn 已经解决冲突后,进行 ci。1
$ svn resolved devhitao.m // svn resolved + 解决冲突后的文件名
5、回退以前的版本1
2$ svn revert devhitao.m //文件名 (仅适用于未提交到服务器上)
$ svn update -r 1314 //版本号,已经提交到服务器根据版本号回退
6、删除文件,删除项目文件,不能直接在文件中删除,要通过命令行方式1
$ svn delete devhitao.m //删除文件 delete(del, remove, rm)
仓库地址
由于某些原因,我们可能需要变更项目中的远程仓库地址。首先需要将终端中切换到 svn 项目仓库目录,执行命令 svn relocate <new_url>
来修改本地仓库所对应的新远程仓库地址,修改过程中可能需要用户认证。eg:1
2
3
4
5
6
7
8
9svn relocate https://[email protected]:12306/blog/trunk
...
(R)eject, accept (t)emporarily or accept (p)ermanently? t
Authentication realm: <https://svn.devhitao.com:12306> Authorization SVN
Password for 'hitao': **********
Authentication realm: <https://svn.devhitao.com:12306> Authorization SVN
Username: guohaitao
Password for 'hitao': ******
在当前 svn 项目仓库下,可通过 svn info
查看 svn 仓库信息。
图形化工具
- Cornerstone 推荐
- SmartSVN
- Xversion
- Versions
- TortoiseSVN
- Xcode SVN (Xcode 10.0 以后不再支持)
- 自己珍藏工具集 密码:
u7td
Cornerstone
不要删除xcuserdata文件夹.只需要删除内部文件 or 将其忽略即可.

设置全局忽略的文件
回退版本:点击 discard 放弃修改,未提交 server,revert 本地信息消失。
忽略配置
iOS 开发1
*.o,*.lo,*.la,*.al,.libs,*.so,*.so.[0-9]*,*.pyc,*.pyo,*.rej,*~,#*#,.#*,.*.swp,.DS_Store,.git,.gitignore,build,DerivedData,*.pbxuser,!default.pbxuser,*.mode1v3,!default.mode1v3,*.mode2v3,!default.mode2v3,*.perspectivev3,!default.perspectivev3,xcuserdata,*.moved-aside,*.xccheckout,*.xcscmblueprint,*.hmap,*.ipa,*.dSYM.zip,*.dSYM,*.zip,Pods,Carthage/Build,fastlane,iOSInjectionProject
代码冲突
代码冲突:当多人修改同一文件时,会造成冲突。
在命令行操作中会提示一下选项让我们选择:
(p) postpone, (df) diff-full, (e) edit, (mc) mine-conflict, (tc) theirs-confict, (s) show all options
p:同时保留自己和服务器文件,开发者需要手动自己解决。mc:用自己文件替换服务器文件。tc:用服务器文件替换自己本地文件。
手动解决冲突后,需要通过 resolved 告诉 SVN 服务器已经解决冲突。
文件状态
通过 svn status
获取文件状态,也可以通过图形化工具轻松的得知文件状态。
- ‘ ‘ :没有修改
- ‘A’ :被添加到本地代码仓库
- ‘C’ :冲突
- ‘D’ :被删除
- ‘I’ :被忽略
- ‘M’ :被修改
- ‘R’ :被替换
- ‘X’ :外部定义创建的版本目录
- ‘?’ :文件没有被添加到本地版本库内
- ‘!’ :文件丢失或者不完整(不是通过svn命令删除的文件)
- ‘~’ :受控文件被其他文件阻隔
命令解释
- svn checkout :下载服务器的代码到本地 (简写svn co)
- svn commit :将改动的文件提交到服务器(简写svn ci)
- svn update :更新服务器的代码到本地 (简写svn up)
- svn add :向本地的版本控制库中添加新文件
- svn delete、svn remove :从本地的版本控制库中删除文件(简写svn del、svn rm)
- svn move :移动文件或者目录或文件更名
- svn mkdir :创建纳入版本控制下的新目录
- svn revert :撤销之前的一切修改
- svn merge :将两个版本之间的差异合并到当前文件
- svn info :查看文件的详细信息
- svn diff :查看不同版本的区别
- svn log :查看日志信息
- svn list :列出版本库下的文件和目录列表
- svn status :查看文件状态(简写svn st)
- svn help :获取帮助信息(比如svn help ci)
- svn lock :加锁
- svn unlock :解锁
FAQ
每次提交到 Server 后,version 自动加 1.