文章目录
  1. 1. 引言
  2. 2. 仓库结构
  3. 3. Server
    1. 3.1. Windows
    2. 3.2. Mac
  4. 4. 命令行
  5. 5. 仓库地址
  6. 6. 图形化工具
    1. 6.1. Cornerstone
      1. 6.1.1. 忽略配置
  7. 7. 代码冲突
  8. 8. 文件状态
  9. 9. 命令解释
  10. 10. FAQ
  11. 11. 参考资料

引言


版本控制源代码管理工具: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.netOSChina码云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
9
svn 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


不要删除xcuserdata文件夹.只需要删除内部文件 or 将其忽略即可.

cornerstone-set-ignore-file
设置全局忽略的文件

回退版本:点击 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.

参考资料


文章目录
  1. 1. 引言
  2. 2. 仓库结构
  3. 3. Server
    1. 3.1. Windows
    2. 3.2. Mac
  4. 4. 命令行
  5. 5. 仓库地址
  6. 6. 图形化工具
    1. 6.1. Cornerstone
      1. 6.1.1. 忽略配置
  7. 7. 代码冲突
  8. 8. 文件状态
  9. 9. 命令解释
  10. 10. FAQ
  11. 11. 参考资料