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

Bar*_*uik 4 git macos 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
Run Code Online (Sandbox Code Playgroud)

.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)
Run Code Online (Sandbox Code Playgroud)

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

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

mu *_*u 無 9

嗯,我认为这是因为忽略规则中的额外空间而发生的,因为你之后添加的评论以及因为它们的模式不匹配.验证git version 1.8.3.2,Ubuntu 13.10

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

.DS_Store
Run Code Online (Sandbox Code Playgroud)

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

*.DS_Store # OS X Finder cache files
.DS_Store # OS X Finder cache files
Run Code Online (Sandbox Code Playgroud)

我的猜测是,你PROJECT_DIR/.DS_Store已经检查了回购,因此没有出现git status,你确定你PROJECT_DIR/.DS_Store的回购已经不存在吗?

做一个git log .DS_Store,看看是否有任何提交被抛出.

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

git rm --cached .DS_Store
git commit -m "msg"
Run Code Online (Sandbox Code Playgroud)

编辑

您正在以错误的格式输入注释,它们必须放在文件/忽略规则的开头.检查一下.

我用评论验证了你的另一个忽略规则 - *.swp它也不起作用.

来自gitignore上的git-scm页面

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

  • git rm --cached .DS_Store为我工作.谢谢 (2认同)