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

64jmpszr  于 2022-12-21  发布在  Git
关注(0)|答案(2)|浏览(96)

这是我的.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没有被忽略呢?

  • 在OS X 10.9.2上运行,使用苹果提供的git版本:“git版本1.8.5.2(苹果Git-48)"*
xjreopfe

xjreopfe1#

我认为这是由于忽略规则中的额外空间、您刚刚添加的注解以及模式不匹配造成的。已在git version 1.8.3.2上验证,Ubuntu 13.10
.gitignore中的以下条目工作正常(没有任何额外空间)

.DS_Store

当这两个都不起作用时(在规则后留有空格)

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

我的猜测是,您的PROJECT_DIR/.DS_Store已经签入到repo中,因此没有显示在git status中,您确定您的PROJECT_DIR/.DS_Store还没有成为repo的一部分吗?
执行git log .DS_Store,看看是否抛出了任何提交。
如果是,请使用第一个有效的忽略规则,并删除现有的.DS_Store,如

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

编辑

您输入的注解格式错误,必须将其放在文件/ignore rules. Check this的开头。
我用comment-*.swp验证了您的另一个忽略规则,它也不起作用。
git-scm page on gitignore
gitignore文件中的每一行都指定了一个模式。当决定是否忽略某个路径时,Git通常会检查多个源中的gitignore模式,其优先级顺序如下,从高到低(在一个优先级内,最后匹配的模式决定结果)

798qvoo8

798qvoo82#

当我们认为.gitignore不起作用时,一个原因可能是这些文件实际上已经提交,所以.gitignore不能忽略它!
从这个链接https://www.atlassian.com/git/tutorials/saving-changes/gitignore“git check-ignore -v pesty.file.name“可以帮助调试. gitignore。这是一个非常有用的调试方法。可能还有更多的情况导致.gitignore无法工作。如果每个人都能分享他们的失败案例,那么如何使它工作,知识库可以不断增长。这个“check-ignore -v”是我们的朋友。

相关问题