Problem

提交代码到别人的git repository,发现原先的代码没有.gitignore文件,很多log文件和编译文件都被提交到了repo上。于是我新建了一个.gitignore文件,但需要手动删除掉所有多出来的文件再提交一个commit(也就是说.gitignore只对之后提交的文件具有ignore作用,对已经提交的文件是不管的,即使已经提交的文件被列为了ignore,仍然会被track)。

问题是怎样能让gitignore对已提交的文件也起作用?

Solution

解决方案其实很简单,即把所有多出来的文件都删掉,再提交一个commit即可,之后这些文件即使再产生也都不会被track了。

当然手动一个一个删很麻烦,可以使用以下的命令批量删除:

git rm . -r --cached

Easter egg

有时候一个文件被gitignore了,而你想知道是哪条规则导致它被ignore的,从而去修改相应的规则,可以使用如下命令(旧版本的git可能没有这个命令):

git check-ignore -v filename

注意上面的filename最好是相对项目根目录的全路径,这样如果是因为某个文件夹整体被ignore了也可以知道,比如:pyvmomi-master/vshpereAut/vsphere_helper.pyc

Reference

  1. .gitignore is not working
  2. which gitignore rule is ignoring my file