为什么Git会忽略一个目录中的所有文件,除了一个?

6

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

这是我的目录结构:

/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/目录下的文件是自动生成的,git会忽略其中所有文件,除了一个名为com.example.MyProject.nocache.js的文件。事实上,当我执行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个回答

6

如果一个文件已经被Git跟踪,将文件添加到.gitignore中不会停止Git对其进行跟踪。你需要执行git rm --cached <file>来保留文件并将其忽略。


我真是太蠢了!之前不小心添加了一个东西,现在只需要将其删除即可。谢谢! - MarcoS
对于使用egit的用户,可以在项目>团队>取消跟踪中执行此操作,这将删除该文件夹中的所有文件(取消跟踪它们),然后提交更改。 - Ismail Marmoush

5
如果文件已经被添加到索引中,即使您将其添加到.gitignore文件中,它仍将保留在其中。
尝试从git索引中删除文件:
git rm --cached war/com.example.MyProject/com.example.MyProject.nocache.js
< p > --cached 选项可以确保文件留在您的文件夹中,只是从索引中删除


1
+1 为补充说明:"--cached" 选项确保文件留在您的文件夹中,只是从索引中删除。 - Philip Oakley

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接