为什么git会忽略除一个目录之外的所有文件?

时间:2011-09-30 09:51:49

标签: git

我知道有很多关于如何忽略目录的问题,直到现在我通常都没有遇到任何问题,但现在我遇到了一些我不理解的问题。

这是我的目录结构:

/src
/war
  com.example.MyProject/
  WEB-INF/
    classes/
    deploy/
    lib/

我想忽略目录classes/deploy/com.example.MyProject/的内容,这是我的.gitignore文件:

*.log
war/WEB-INF/classes/
war/WEB-INF/deploy/
com.example.MyProject/

com.example.MyProject/下的文件会自动生成,除了名为com.example.MyProject.nocache.js的文件外,git会忽略所有文件。事实上,当我git status时,我得到了:

# On branch myBranch
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#
#       modified:   .gitignore
#       ......
#       modified:   war/com.example.MyProject/com.example.MyProject.nocache.js

为什么git拒绝忽略该目录中的单个文件?我做错了什么?

2 个答案:

答案 0 :(得分:6)

如果Git已经在跟踪文件,则将文件添加到.gitignore不会阻止Git跟踪它。您需要执行git rm --cached <file>将文件保留在树中,然后忽略它

答案 1 :(得分:5)

如果该文件已添加到索引中,即使您将其添加到.gitignore文件,它仍会保留在那里。

尝试从git索引中删除文件:

git rm --cached war/com.example.MyProject/com.example.MyProject.nocache.js

--cached选项可确保文件保留在您的文件夹中,并且只是从索引中删除