$ 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本身未被修改,此版本已提交。
我该如何解决?
答案 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