为什么.gitignore中的目录仍被“跟踪”;git状态“;?

为什么.gitignore中的目录仍被“跟踪”;git状态“;?,git,gitignore,status,Git,Gitignore,Status,My.gitignore文件包括 project/app/__pycache__ 但当我运行git status时,它会报告此目录中文件的更改 mydomain:main satishp$ git status On branch master Your branch is up to date with 'origin/master'. Changes not staged for commit: (use "git add/rm <file>..." to update

My.gitignore文件包括

project/app/__pycache__
但当我运行git status时,它会报告此目录中文件的更改

mydomain:main satishp$ git status
On branch master
Your branch is up to date with 'origin/master'.

Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)



deleted:    project/app/__pycache__/__init__.cpython-37.pyc
    deleted:    project/app/__pycache__/models.cpython-37.pyc
mydomain:main satishp$git状态
论分行行长
您的分支机构是最新的“来源/主”。
未为提交而暂存的更改:
(使用“git add/rm…”更新将提交的内容)
(使用“git签出--…”放弃工作目录中的更改)
已删除:project/app/\uuuuu pycache\uuuuuuu/\uuuuuu init\uuuuuuuuuuuuuuu.cpython-37.pyc
已删除:project/app/_-pycache\u_/models.cpython-37.pyc

在.gitignore中包含此目录不应该阻止这一点吗?还是我做错了什么?

那是因为在将它添加到
.gitignore
之前,它已经被跟踪了。因此,它现在将其解释为已删除。要修复此问题,您必须从以前的所有提交中删除该文件。这是一个常见的场景:您提交了一些文件,直到后来才意识到应该忽略它们

一种解决方案是清除Git缓存(改编自):

  • 用正确的模式更新你的
    .gitignore
    (听起来你已经这样做了)
  • 提交或隐藏任何未完成的更改。您的工作副本必须是干净的(即,
    git状态
    必须返回“无需提交,工作树干净”)
  • 使用
    git rm
    --cached
    选项删除在被忽略之前意外提交的有问题的文件/模式,例如
  • 或者指定确切的文件/目录,例如,
    git rm-r--cached path/to/file

  • 现在,您可以将这些更改添加到回购历史记录中:
    git add.

  • 并提交它们:
    git commit-m“清理被忽略的文件”


  • 这将使您的回购走上正确的轨道。

    如果在添加要忽略的路径之前对其进行了跟踪,则需要明确取消跟踪文件夹。这是否回答了您的问题?旁注:Git根本不跟踪目录,只跟踪单个文件。
    git status
    命令有时会通过列出目录名来汇总未跟踪的文件,以避免列出所有文件的名称,但跟踪或未跟踪是逐文件的。相比之下,忽略模式实际上可以忽略整个目录。相互作用是。。。这回答了你的问题吗?
    git rm -r --cached project/app/__pycache__