尽管在.gitignore中,.DS_Store仍然以git状态出现

时间:2014-09-06 12:21:03

标签: git gitignore

$ cat .gitignore 

# OSX
*/.DS_Store
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
Icon?
ehthumbs.db
Thumbs.db

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

    modified:   Assets/Sprites/.DS_Store

no changes added to commit (use "git add" and/or "git commit -a")

现在.gitignore和状态消息中有更多不相关的文件,但.gitignore本身未被修改,此版本已提交。

我该如何解决?

2 个答案:

答案 0 :(得分:15)

  

.DS_Store仍然出现在git status中,尽管它位于.gitignore

.DS_Store文件在git status的输出中列为修改后的文件,这意味着它正在被Git跟踪。但是,Git不会忽略当前正在跟踪的文件,无论它是否列在您的.gitignore文件中。

你是如何在这种情况下做到的?在添加.DS_Store条目{/ 1}}之前,您必须无意中开始跟踪.DS_Store文件

  

.gitignore本身未被修改,此版本已提交。

要忽略的文件列表不是由您可能已提交的.gitignore文件的任何版本确定的,正如您似乎相信的那样。 相反,在任何给定时间,Git都使用工作树中的.gitignore文件(如果有的话)。

  

我该如何解决?

您需要告诉Git停止跟踪.gitignore文件,方法是运行

.DS_Store

由于git rm --cached -- <path_to_the_.DS_Store-file> 标记,有问题的--cached文件无法从您的工作树中删除,但将包含在您的后续提交中,从那时起应该适当地忽略它。

答案 1 :(得分:10)

确保.DS_Store不在缓存中:

git rm --cached -- Assets/Sprites/.DS_Store