Mac系统SVN的配置与使用规范
在iOS开发中,通常使用SVN或者Git来做版本管理。本文总结了近期项目中涉及到SVN的一些知识和使用规范,主要内容包括以下三点:
- Mac OS开启SVN服务和相关配置
- 初始化项目注意事项
- SVN使用规范与误操作示范
1.Mac OS开启SVN服务和相关配置
Mac系统自带SVN,不必通过“虚拟机 + VisualSVN Server”的方式来搭建SVN服务器,只需要通过终端命令打开SVN服务器即可。
1.1 创建版本仓库
执行以下命令后,系统会在~/svn/project目录创建版本仓库。
mkdir ~/svn
cd ~/svn
mkdir project
svnadmin create ~/svn/project
1.2 配置SVN
找到SVN目录中的conf文件夹,打开svnserve.conf

配置以下几项:
[general]
anon-access = none // 未授权访问的权限
auth-access = write // 授权访问的权限
password-db = passwd // 账户管理文件
authz-db = authz // 授权管理文件
1.3 添加用户和用户权限
打开passwd文件,添加用户及其密码。如下图所示,这里添加了3个用户,分别是test1,test2,test3,密码都是123456.

打开autuz添加用户权限。
这里可以给用户分组,如图所示,我把用户分成两组(group1和group2,组名随意),group1的成员包括test1和test2,group2的成员包括test2和test3,多个成员用逗号隔开即可。
下面对具体文件夹的访问权限做限制,[/]表示根目录(project文件夹),[/folderName]表示根目录下folderName文件夹,这里我设定了group1可以读写根目录,group2只能读写folderName文件夹。除了对组设置权限,也可以对单个用户设置权限,例如这里test1也设置了对folderName的读写权限。

1.4 开启SVN服务器
输入以下指令后,若无提示错误,表示开启成功。
svnserve -d -r ~/svn/project
1.5 关闭SVN服务器
killall -9 svnserve
2.初始化项目注意事项
这里使用CornerStone作为SVN客户端来进行操作,首先连接远程仓库。

连接成功后checkout远端仓库到本地的TestProject1目录,表示是test1用户的本地仓库。

将创建好的xcode工程(TestProject)拖到本地仓库。

拖进去之后在Cornerstone查看该目录,显示问号标识。可以通过以下步骤知道,问号表示Unversioned状态,意思是SVN不知道要如何处理,你要把它忽略还是添加到版本管理中,还是要删掉。这里我们要添加到版本管理,选中该目录,点击下面的“Add”按钮即可。

我们发现每次添加只能添加一层目录,目录下的文件依然需求手动添加,工作量非常大。如果确认目录下Unversioned文件都要添加,可以长按Add按钮,选择把内容全部添加。

如果有Unversioned文件时,点击commit,会弹出4个选项:
- cancel:取消提交
- ignore:将所有Unversioned文件都忽略,不提交
- Add to Working Copy:将所有Unversioned文件都添加到版本管理
- Commit Anyway:不管UNversioned文件,提交可提交文件。
假如你确认所有UNversioned的文件都要添加到版本管理中,选择Add to Working Copy。这里并不是所有Unversioned文件都要添加,原因下面说明,这里先取消不提交。

在项目中,有三处地方存放着用户数据,这些用户数据不是代码,没有必要添加到版本管理中,所以可以将文件夹忽略掉(右键 -> Ignore)。忽略之后,可以点Commit -> Add to working copy,将其余Unversioned文件添加进来一并提交。

使用test2账户checkout项目,模拟多人开发中的组员。

打开项目,编译报错

这种情况是由于SVN默认忽略.a文件引起的,可以在CornerStone的偏好设置里修改。

反勾选默认全局忽略,将*.a删掉,保存。将所有静态库添加到版本管理中提交即可。

3.SVN使用规范误操作示范
情况1:多个开发者修改了同一个文件
多个开发者修改了同一个文件,其中一个先提交,其他人update时就会有冲突。

打开冲突文件,"<<<< .mine"到"===="之间是自己的代码,下面是其他人的代码。如果都要保留,只需要将这些符号删除就可以了。

解决冲突后,需要Resolve一下,冲突标识就没了。

情况2:添加新文件没有及时提交
由于xcode项目中文件目录的变化(添加、删除、移动位置)都会修改 多个开发者在项目中添加文件,没有及时提交,导致项目文件冲突。 项目文件冲突直接导致项目无法打开。
打开项目文件,根据类名判断是要都保留还是还删除其中一个。这里因为是两个不同的类,所以都保留,只需要删掉冲突符号就可以了。打开项目文件,根据类名判断是要都保留还是还删除其中一个。这里因为是两个不同的类,所以都保留,只需要删掉冲突符号就可以了。

打开项目文件,根据类名判断是要都保留还是还删除其中一个。这里因为是两个不同的类,所以都保留,只需要删掉冲突符号就可以了。
情况3:多人修改xib或者storyboard
跟个人开发者修改同一个文件类似,但是xib或storyboard会打不开,需要用代码来打开。这样的冲突解决起来十分麻烦,所以一般使用SVN时规定一个xib或storyboard只能由一个人来修改,这样在遇到冲突时,按负责人的版本为准就可以了。
