iOS开发中使用SVN的正确姿势

日常开发中,源代码管理我们一般使用Git和SVN.本文主要介绍如何在iOS开发中使用SVN命令行和Xcode对源代码进行管理,并对"垃圾"文件进行忽略.为了演示更加真实,我们需要搭建一个SVN服务器.

1. Mac环境下配置SVN服务器

Mac环境是自带了SVN客户端和服务器的功能,如果想配置SVN服务器,我们需要以下步骤:

1.1 创建代码仓库

  • 在桌面上创建 /svn 文件目录,并在svn目录下创建一个SVN代码仓库 /code
  • 在终端输入指令 svnadmin create /Users/haoshuai/Desktop/svn/code
  • 执行成功后,code 文件目录结构如下:
Snip20170703_1.png

1.2 配置SVN用户权限

主要配置 svn/code/conf 下的三个文件:

  • 打开 svnserve.conf 文件,将下列配置项前面的 #空格 都去掉.
    # anon-access = read
    # auth-access = write 
    # password-db = passwd    
    # authz-db = authz 
  • svnserve.conf 文件中 anon-access = read配置后面添加一个配置项:anon-access = none.
  • 打开 passwd 文件,在[users]下添加 账号 和 密码,例如:
[users]
codeCoder = 123
Tom = 456
  • 打开 authz 文件,配置用户组:
    [groups]
    iOS_group = codeCoder,Tom
  • authz 文件中配置权限:
[/]
@iOS_group = rw

以上的配置,添加了一个iOS_group用户组,并给这个用户组添加了两个用户,codeCoder和Tom,他们对代码仓库 /code 文件夹里的文件具有读写权限.

1.3 启动和关闭SVN服务器

  • 启动:

在终端中输入命令: svnserve -d -r /Users/haoshuai/Desktop/svn 或者 svnserve -d -r /Users/haoshuai/Desktop/svn/code
没有任何提示表示启动成功

  • 关闭:

打开活动监视器来关闭:


Snip20170703_2.png

2. SVN文件目录的组织结构

2.1 本地代码仓库和远程SVN仓库关联

  • 在桌面上创建 /local 文件夹,代表本地代码仓库.
  • 将svn上的代码仓库 checkout 至本地代码仓库 cd /Users/haoshuai/Desktop/local svn co svn://localhost/code/ --username=codeCoder --password=123

2.2 svn的目录组织结构

在代码导入到SVN之前,首先需要考虑如何组织。如果使用一种推荐的布局,以后的操作将会更容易许多。
我们一般在代码目录的顶级建3个子文件夹 /trunk/branches/tags ,分别表示主干,分支,和打包版本:详细介绍
我们打开命令行,进入本地仓库并创建三个文件夹,然后提交.

cd /Users/haoshuai/Desktop/local/code 
svn mkdir trunk
svn mkdir branches
svn mkdir tags
svn ci -m'创建目录结构'

3.首次将代码上传至SVN服务器

我们创建好一个示例工程 myProject ,这个工程和我们实际成产环境的工程基本一致,并且是用cocoaPos来管理第三方库的,并且已经添加了AFNetWorking这个第三方库.
先来看一下我们项目的目录结构:

myProject目录结构.png

在我们的XCode项目中,一般有一些文件是不需要上传到服务器的,比如断点信息,文件夹开合情况等等...如何一劳永逸忽略这些文件呢?
使用 git 时,我们有一个.gitignore文件,初始化项目时加入这个文件,不需要的信息会自动忽略.很 方便 .
但使用 SVN 的时候,就相对 麻烦 了,接下来我们一步一步来完成对SVN的文件的忽略.

  • 模仿gitignore,创建我们自己的 .svnignore 文件

SVN中,我们使用比如 svn propset svn:ignore -R -F .svnignore . 这样的命令,来对着文件夹下的所有文件进行忽略的属性设置,需要忽略的类型参数就在 .svnignore 中设置. 以下是我的.svnignore文件的内容

# Build generated
build
DerivedData

# Various settings
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata

# Other
*.moved-aside
*.xccheckout
*.xcscmblueprint

# Obj-C/Swift specific
*.hmap
*.ipa
*.dSYM.zip
*.dSYM

# CocoaPods
Pods

# Carthage
Carthage/Build

# fastlane
fastlane/report.xml
fastlane/Preview.html
fastlane/screenshots
fastlane/test_output

# Code Injection
iOSInjectionProject
  • 将项目copy到 /Users/haoshuai/Desktop/local/code/trunk 文件夹中.
cd /Users/haoshuai/Desktop/local/code/trunk
svn status

显示:
? myProject
说明myProject未处于SVN管理之下,此时,我们 不能 直接运行命令 svn add myPtojcet .,这个命令是递归的将 myPtojcet 文件夹下所有文件加入SVN 管理之中,这样会导致所有的文件的状态 都变为 A (也包括我们要忽略的文件).
举个栗子:

  • 我们使用这个命令svn add -N myProject/,只将myProject这个文件夹加入SVN管理
QQ20170706-164825.png
  • 依次使用如下命令:
cd myProject/
svn add -N myProject.xcodeproj/
svn add -N myProject.xcodeproj/project.xcworkspace/
svn add -N myProject.xcworkspace/
QQ20170706-171316.png

这里解释一下,我们想要用svn propset svn:ignore命令来对文件属性进行忽略,那么这个文件所在的文件夹必须加入版本控制. 例如 myProject.xcodeproj 就是一个文件夹,里面有要忽略的文件,而且在这个文件夹里还有个 project.xcworkspace 文件夹,里面也有要忽略的文件,那我们就要依次将这些文件夹 add 进 版本控制里.

  • 使用svn propset svn:ignore -RF /Users/haoshuai/Desktop/.svnignore .命令对文件夹里的文件进行忽略

我的 .svnignore 文件在桌面上,所以使用这个命令对工程文件里的属性进行配置.

QQ20170706-172806.png

设置忽略属性前后的对比


QQ20170706-173300.png
QQ20170706-173328.png
  • 使用svn add . --force命令将其余未忽略的文件加入版本控制

    QQ20170706-173804.png

    可以看到,最终添加的文件都是我们想要添加的文件.

  • 提交,输入 svn ci -m'项目初始化上传' 命令提交项目至远程服务器.

经过以上的设置,我们将一些文件忽略,这样,如果从服务器上checkout下来新的代码后,修改代码,提交文件时,不会将无用的文件移交上去.虽然很麻烦,但是SVN就是这样,我暂时还没有找到其他的方法.

4.分支管理

4.1创建分支

svn cp svn://localhost/code/trunk/ svn://localhost/code/branches/br_feature001 -m'create branch'

cd /Users/haoshuai/Desktop/local/code/branches

svn co svn://localhost/code/branches/br_featyre001

4.2合并主干上的代码至分支

cd /Users/haoshuai/Desktop/local/code/branches/br_feature001

svn merge svn://localhost/code/trunk/

4.3合并分支上的代码至主干

cd /Users/haoshuai/Desktop/local/code/trunk

svn merge --reintegrate svn://localhost/code/branches/br_feature001

分支合并至主干后,需要删除分支.

svn rm svn://localhost/code/branches/br_feature001 -m'delete feature001'

5.打标签 tags

svn cp svn://localhost/code/trunk svn://localhost/code/tags/1.0 -m'1.0 released'
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容

  • iOS 开发 SVN 版本控制器 更多技术交流请加群 iOS技术联盟 27512466 SVN是Subversio...
    Sunny_Fight阅读 8,630评论 7 63
  • 前言: 1.本文讲的是SVN版本控制工具常用功能,包括命令行和界面化操作2.如果想了解GIT使用方式,请移步这里 ...
    珍此良辰阅读 17,349评论 10 57
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,099评论 18 139
  • 源代码管理工具-SVN 一. 了解-源代码管理工具概述 1. 源代码管理工具的作用?> 能追踪一个项目从诞生一直到...
    Louis_hey阅读 11,368评论 1 8
  • 几乎每一个可测量的心理特质,包括智商、人格、艺术能力、数学能力、音乐能力、写作能力、幽默风格、创意舞蹈、体育、幸福...
    烈日逐风阅读 246评论 0 0