Git 忽略文件不提交到版本库
最近在学习使用git,在自己的项目里也开始使用了。其中有一个十分有用的文件: .gitignore
,其作用是忽略那些你不想提交到版本库里的文件,例如含有密码的本地文件,编译器或者IDE生成的中间文件等。
具体 .gitignore
怎么写,官方文档里已经写的很清楚了,一行一个忽略规则,可以使用*
,?
等通配符。
其实不用自己从头开始写,在这里https://github.com/github/gitignore已经有前人写好了绝大多数使用场合下的 .gitignore
文件,我们只要拿过来自己稍加修改一下就可以了。
这里说一些需要特别注意的地方。
1、由于git不会加入空目录,所以下面做法会导致tmp不会存在
# 忽略tmp文件夹所有文件
tmp/*
改为以下方法,在tmp下也加一个 .gitignore
文件,内容为:
*
!.gitignore
2、已经commit了的文件,再加入 .gitignore
文件想要忽略他是无效的,需要删除缓存:
git rm -r --cached ignore_file
原因是 .gitignore
文件只能作用于Untracked文件,也就是那些从来没有被 Git 记录过的文件(自添加以后,从未 add 及 commit 过的文件)。
所以正确的顺序应该是:
- 从 Git 的数据库中删除对于该文件的追踪。
- 把对应的规则写入
.gitignore
文件,让忽略真正生效。 - 提交+推送。
最后需要注意的是,git rm --cached
删除的是追踪状态,而不是物理文件。
3、 .gitignore
文件还有个特殊用途。 一个空的 .gitignore
文件可以当作是一个placeholder 。
当你需要为项目创建一个空的 log 目录时, 这就变的很有用。 你可以创建一个 log 目录,在里面放置一个空的 .gitignore
文件。这样当你 clone 这个 repo 的时候 git 会自动的创建好一个空的 log 目录了。
本文参考了以下内容:
http://blog.csdn.net/xmyzlz/article/details/8592302
https://segmentfault.com/q/1010000000430426