如何使用.gitignore文件

有的时候我们需要忽略一些文件,不希望放到git版本库里,比如node_modules,或者一些自动生成的log文件,或者cache什么的。

这时候第一个想法就是不把它git add到暂存区。但是这样也很麻烦,因为如果不是这些特殊文件,我们可以直接git add -A来将所有文件一次添加,手动add每一个文件真的很头疼。

于是有了.gitignore文件,在项目文件夹下新建一个.gitignore文件,在里面写上需要特殊忽略的文件,那么下次git add -A的时候就不会添加这些文件了。非常方便。

这里要写相对路径,比如这个项目叫violet,我要忽略violet/node_modules这个文件夹下的所有文件。
那么我可以在violet/.gitignore文件里这样写

1
2
# node模块
/node_modules/*

类似的你还可以只忽略xx结尾的文件,比如*.xx,就会忽略所有扩展名为xx的文件。

前面加上感叹号则可以强制不忽略它。比如

1
2
3
4
5
# 忽略所有的log文件
*.log

# 但是不要忽略important.log这个文件
!important.log

为什么忽略掉的文件还在Github上?

有的时候添加了忽略似乎版本库里还是有这些文件,是由于你在忽略它之前就曾经将它git add到版本库了。因此你需要告诉git, 干掉它

这里有两种情况,一种是,这个文件不重要,是一些想删就删,删的开心的日志文件xx.log,那你就可以直接运行git rm xx.log,然后这个文件就被git删掉了。此时你再生成一下xx.log,用git status来查看文件跟踪状态,就发现不会再提示你要添加这个日志文件了。

还有一种情况,那就是一些存放密码或者不想让别人知道的文件,这种文件不能删掉,但是又必须告诉git,你不用再控制这个文件版本了。那么你可以运行git rm secret.yml --cache,加一个--cache参数,表示从暂存区删去,但真实文件不会被删掉。

这个技巧还可以解决另一个尴尬的事情。当你在本地直接删除了一个文件或文件夹,没有用git rm,然后同步到Github后,发现这个文件还在,并没有被删掉,而本地其实已经没了。那么也可以用git rm --cache来删除。

另外注意,要删除文件夹的话,还要加一个参数-r,这和git无关,是rm命令的参数,表示递归删除,不然可能会报错。有时还有些权限问题,所以顺便再加一个-f表强制删除,略危险但很省心。嗯,死ね。两个合起来可以简写为rm -rf folder,喜欢作死的可以试试rm -rf /

还是别乱试了。。。

如有疏漏,欢迎评论指出,或者前往Github提出issue~谢谢