之前公司都是用SVN做项目代码版本管理也需要做忽略文件,
现在公司是用git做版本管理, 借此说下iOS用Xcode开发中,用git提交代码时,
如何忽略本地不必要的文件。
比如说忽略 .DS_Store, xcuserdata/ 或者某些有framework的文件夹等
设置.gitignore文件只对当前设置的项目有效果,不是全局的其他项目有效果
1.首先查看你xcode项目目录下有没有隐藏文件.gitignore(如何显示和隐藏文件请参考上一篇博客的解决方法)
请先显示系统的隐藏文件
若有.gitignore直接用记事本编辑器打开。
若没有.gitignore文件,请用终端命令,cd到你的项目目录下。用touch .gitignore命令新建一个.gitignore文件
2.在git 忽略文件.gitignore内添加要忽略的文件,保存即可生效
比如我的如下: (其中#号开头的会被git忽略,相当于我们开发注释 // )
.DS_Store
ModuleFrameworks/
xcuserdata/
常用的规则:
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只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。那么解决方法就是先把本地缓存删除(改变成未track状态),然后再提交:
git rm -r --cached .
git add .
git commit -m 'update .gitignore'
最后,再 git push 到远程仓库
注意:这种半路加入忽略文件,改成未track状态提交再PUSH到远程容易将忽略文件在远程操库删除!
当重新克隆这个项目的时候回会缺少忽略文件内所写的文件
4.使用本地.git/info/exclude
git 还提供了另一种 exclude 的方式来做同样的事情,不同的是 .gitignore 这个文件本身会提交到版本库中去。用来保存的是公共的需要排除的文件。而 .git/info/exclude 这里设置的则是你自己本地需要排除的文件。 他不会影响到其他人。也不会提交到版本库中去。
举例:
# git ls-files --others --exclude-from=.git/info/exclude
# Lines that start with '#' are comments.
# For a project mostly in C, the following would be a good set of
# exclude patterns (uncomment them if you want to use them):
# *.[oa]
# *~
.gradle/
.idea/
.settings/
appcompat_v7/
bin/
build/
gen/
gradle/
out/
proguard/
ship/
target/
.classpath
.gitignore
.idea
.project
.readme
.update-config
*.iml
local.properties