美文网首页
iOS开发中使用SVN的正确姿势

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

作者: codeCoder | 来源:发表于2017-07-14 20:51 被阅读1646次

    日常开发中,源代码管理我们一般使用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'
    

    相关文章

      网友评论

          本文标题:iOS开发中使用SVN的正确姿势

          本文链接:https://www.haomeiwen.com/subject/fjtzcxtx.html