CocoaPods - .gitignore配置

作者: MichaelLedger | 来源:发表于2018-05-08 11:38 被阅读10次

    Git 忽略规则

    一般来说每个Git项目中都需要一个“.gitignore”文件,这个文件的作用就是告诉Git哪些文件不需要添加到版本管理中。实际项目中,很多文件都是不需要版本管理的,比如Python的.pyc文件和一些包含密码的配置文件等等。这个文件的内容是一些规则,Git会根据这些规则来判断是否将文件添加到版本控制中。

    下面我们看看常用的规则:
    1)/mtk/ 过滤整个文件夹
    2)*.zip 过滤所有.zip文件
    3)/mtk/do.c 过滤某个具体文件

    很简单吧,被过滤掉的文件就不会出现在git仓库中(gitlab或github)了,当然本地库中还有,只是push的时候不会上传。
    需要注意的是,gitignore还可以指定要将哪些文件添加到版本管理中:
    1)!*.zip
    2)!/mtk/one.txt

    唯一的区别就是规则开头多了一个感叹号,Git会将满足这类规则的文件添加到版本管理中。
    为什么要有两种规则呢?想象一个场景:假如我们只需要管理/mtk/目录中的one.txt文件,这个目录中的其他文件都不需要管理,那么我们就需要使用:
    1)/mtk/
    2)!/mtk/one.txt
    假设我们只有过滤规则,而没有添加规则,那么我们就需要把/mtk/目录下除了one.txt以外的所有文件都写出来!

    最后需要强调的一点是,如果你不慎在创建.gitignore文件之前就push了项目,那么即使你在.gitignore文件中写入新的过滤规则,这些规则也不会起作用,Git仍然会对所有文件进行版本管理。
    简单来说,出现这种问题的原因就是Git已经开始管理这些文件了,所以你无法再通过过滤规则过滤它们。因此一定要养成在项目开始就创建.gitignore文件的习惯,否则一旦push,处理起来会非常麻烦。

    Xcode项目的 .gitignore 配置

    git版本控制的时候,有很多非代码文件也会被跟踪,比较常见的如一些影藏文件DS_Store、以xcworkspace、xcuserstate、xcuserdata等结尾的状态文件等。为了不把这些文件加入版本控制体系中,我们需要进行以下三步设置,注意,每一步必不可少,也不可交换位置,下文会具体解释原因。
    第一步:进入git的代码仓库,执行以下的代码

    // 删除已被git管理的文件
    git rm --cached *.xcuserstate
    git rm --cached *.xcuserdata
    

    这两行代码(或者可以有更多,自己修改后缀名即可,这里列出了常见的两种隐藏文件)表示不再追踪以这些后缀结尾的文件,注意这里的文件在执行代码前其实已经被追踪(Tracked),执行完后,将不再被追踪。

    // 删除已被git管理的文件目录
    git rm --cached -r Pods/
    

    第二部:修改.gitignore文件:

    vim .gitignore
    

    这时候会进入gitignore的文件的编辑界面,如果这个文件已经存在,则可以通过普通的文本编辑器直接进行修改(需要设置显示隐藏文件),复制以下内容进入.gitignore文件。

    ignore.io推荐

    # Created by https://www.gitignore.io/api/xcode
    
    ### Xcode ###
    # Xcode
    #
    # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore
    
    ## Build generated
    build/
    DerivedData/
    
    ## Various settings
    *.pbxuser
    !default.pbxuser
    *.mode1v3
    !default.mode1v3
    *.mode2v3
    !default.mode2v3
    *.perspectivev3
    !default.perspectivev3
    xcuserdata/
    
    ## Other
    *.moved-aside
    *.xccheckout
    *.xcscmblueprint
    
    ### Xcode Patch ###
    *.xcodeproj/*
    !*.xcodeproj/project.pbxproj
    !*.xcodeproj/xcshareddata/
    !*.xcworkspace/contents.xcworkspacedata
    /*.gcno
    
    
    # End of https://www.gitignore.io/api/xcode
    

    如果使用CocoaPods,建议将 'Pods/' 添加到忽略文件中:

    # CocoaPods
    #
    # We recommend against adding the Pods directory to your .gitignore. However
    # you should judge for yourself, the pros and cons are mentioned at:
    # http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control
    #
    Pods/
    Podfile.lock
    

    按esc键退出编辑,输入:wq保存文件。
    注意这里的gitignore文件的修改,仅对未追踪(Untracked)的文件生效,所以首先要执行第一步,取消对以上类型文件的追踪。

    第三步:提交此处版本修改

    git commit -m "Modify .gitignore"
    

    记得要执行此次提交,否则之前的修改不被保存。

    重启Xcode并且尝试修改一个文件后执行commit,发现那些与代码无关的文件并不会被自动提交了。

    Git 忽略规则及 .gitignore 规则不生效的解决办法

    在git中如果想忽略掉某个文件,不让这个文件提交到版本库中,可以使用修改根目录中 .gitignore 文件的方法(如无,则需自己手工建立此文件)。这个文件每一行保存了一个匹配的规则例如:

    # 此为注释 – 将被 Git 忽略
    *.a # 忽略所有 .a 结尾的文件
    !lib.a # 但 lib.a 除外
    /TODO # 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO
    build/ # 忽略 build/ 目录下的所有文件
    doc/*.txt # 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt
    

    规则很简单,不做过多解释,但是有时候在项目开发过程中,突然心血来潮想把某些目录或文件加入忽略规则,按照上述方法定义后发现并未生效,原因是.gitignore只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。那么解决方法就是先把本地缓存删除(改变成未track状态),然后再提交:

    git rm -r --cached .
    git add .
    git commit -m 'update .gitignore'
    

    注意:
    不要误解了 .gitignore 文件的用途,该文件只能作用于 Untracked Files,也就是那些从来没有被 Git 记录过的文件(自添加以后,从未 add 及 commit 过的文件)。
    如果文件曾经被 Git 记录过,那么.gitignore 就对它们完全无效。

    参考:
    ignore.io推荐
    iOS开发中的git忽略文件
    Xcode git版本控制忽略无关文件
    Git忽略规则.gitignore梳理

    相关文章

      网友评论

        本文标题:CocoaPods - .gitignore配置

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