.gitignore不适用于子目录中的文件

时间:2014-04-11 15:51:30

标签: macos git gitignore

这是我的.gitignore文件的内容,它位于我的存储库的根目录:

# grails stuff to ignore
target
*.iml
*.ipr
.idea
*.log
*.swp   # vi swap files
.DS_Store  # OS X Finder cache files

# cocoapods stuff to ignore
Pods
Podfile.lock

我的项目根目录中的.DS_Store文件被正确忽略,但git status给出:

$ git status
On branch master
Your branch is ahead of 'origin/master' by 2 commits.
  (use "git push" to publish your local commits)

Untracked files:
  (use "git add <file>..." to include in what will be committed)

    ios/.DS_Store

nothing added to commit but untracked files present (use "git add" to track)

那么为什么ios/.DS_Store不被忽视?

使用Apple提供的git版本在OS X 10.9.2上工作:“git version 1.8.5.2(Apple Git-48)”

2 个答案:

答案 0 :(得分:9)

好吧,我认为它正在发生,因为忽略规则中有额外的空间,因为你之后添加的评论以及因为它们的模式不匹配。已在git version 1.8.3.2Ubuntu 13.10

上验证

.gitignore中的以下条目可以正常工作(没有任何额外空间)

.DS_Store

虽然这些都不起作用(规则后有空格)

*.DS_Store # OS X Finder cache files
.DS_Store # OS X Finder cache files

我的猜测是,您的PROJECT_DIR/.DS_Store已经检入了回购广告,因此未显示在git status中,您确定PROJECT_DIR/.DS_Store尚未成为回购的一部分吗? ?

执行git log .DS_Store并查看是否有任何提交。

如果是,请使用有效的第一个忽略规则,并删除现有的.DS_Store

git rm --cached .DS_Store
git commit -m "msg"

<强> 修改

您输入的评论格式错误,必须将它们放在文件/忽略规则的开头。 Check this

我使用评论*.swp验证了您的其他忽略规则,但它也无效。

来自git-scm page on gitignore

  

gitignore文件中的每一行都指定一个模式。在决定是否忽略路径时,Git通常会检查来自多个源的gitignore模式,具有以下优先顺序,从最高到最低(在一个优先级内,最后一个匹配模式决定结果)

答案 1 :(得分:0)

当我们认为.gitignore不起作用时,原因之一可能是实际上是提交了那些文件。因此.gitignore不能忽略它!

通过此链接https://www.atlassian.com/git/tutorials/saving-changes/gitignore,“ git check-ignore -v pesty.file.name”可以帮助调试.gitignore。这是一种非常有用的调试方法。可能还有更多其他情况导致.gitignore无法正常工作。如果每个人都可以分享失败的案例,以及如何使其成功,则知识库可以不断发展。这个“ check-ignore -v”是我们的朋友。