Git删除受管控的文件

在提交代码时,有许多的初学者甚至是老程序员也会犯一个错误,那就是把一些不应该提交到源代码仓库的文件也提交到仓库,比如编译后的输出bin/目录,本地工程的一些设置文件如.idea,.settings。如果一旦提交到远程仓库,那么还将影响到团队中的其他成员。每次更新的时候,都会将别人的设置更新下来,可能会导致编译不通过等诸多问题。一旦这些文件受git管控,那么想删掉它就麻烦了。如果本地删除,再commit和push,那么其他成员更新代码的时候,他本地的也会被删除。对于编译输出的文件还好,再编译一次就可以。如果是环境设置类的文件,那么对方就惨了。会导致许多莫名的错误。

所以平时提交代码的时候,一定要细心,可以使用git status查看状态。不要一味的git add .添加所有的修改。git add之后,也可以再次git status确认哪些要commit。

但是如果确实不小心commit并push了不必要的文件,那也没关系。git提供了git rm指令来删除文件。删除方式有两种

  1. 彻底删除文件,从git仓库中和文件系统中都删除。这是默认的方式。对于已经提交远程仓库的eclipse工程的 .bin目录,Android Studio的build目录,可以这么操作。

    Copy Code

git rm -r bin/
  1. 只从git仓库中删除,文件系统中不删除。推荐此种方式。

    Copy Code

git rm -r --cached bin/

删除之后,记得在.gitignore文件中添加忽略。

以下是一个示例,svn转git时,竟然将.svn也提交到git仓库。导致git仓库变得非常大。所以需要递归删除掉.svn目录。

Copy Code

find -name '.svn' |xargs git rm -rf [--cache]