.gitignore不会忽略子目录中的文件

时间:2016-10-21 10:28:06

标签: git gitignore

我的存储库顶级文件夹中有一个 .gitignore 文件,其中包含以下代码:

# Compiled python modules.
*.pyc

# Backup gedit files.
/*~

# Setuptools distribution folder.
/dist/

# Python egg metadata, regenerated from source files by setuptools.
/*.egg-info
/*.egg

当我尝试运行git add .命令时, .gitignore 没有任何效果,因为添加了几个/ *〜。 git status的输出如下:

new file:   uvispace/tests/test_messenger.py
new file:   uvispace/tests/test_messenger.py~
new file:   uvispace/tests/test_robot.py~
new file:   uvispace/uvirobot/__main__.py~
new file:   uvispace/uvirobot/messenger.py~
new file:   uvispace/uvirobot/move_base.py

类似问题

我看过几个非常相似的问题,例如this onethis one。他们的解决方案是删除以前添加的文件,然后按照以下说明再次添加整个存储库:

git rm -rf --cached .
git add *

然而,我尝试了它并没有区别。任何人都知道为什么会这样?

2 个答案:

答案 0 :(得分:3)

有关gitignore语法的文档可在此处找到:git-scm.com/docs/gitignore

可能错误的一件事是您的 /*~ ,因为单个 * 无法按照您的预期运作:

  

例如,“Documentation / * .html”匹配“Documentation / git.html”,但不匹配“Documentation / ppc / ppc.html”或“tools / perf / Documentation / perf.html”。

您必须使用 **

  

•前导“**”后跟斜杠表示所有目录都匹配。例如,“**/foo”匹配文件或目录“foo”,与模式“foo”相同。 “**/foo/bar”将文件或目录“bar”匹配在“foo”目录下的任何位置。

     

•尾随“/**”匹配内部的所有内容。例如,“abc/**”匹配目录“abc”内的所有文件,相对于.gitignore文件的位置,具有无限深度。

     

•斜杠后跟两个连续的星号,然后斜杠匹配零个或多个目录。例如,“a/**/b”匹配“a/b”,“a/x/b”,“a/x/y/b”等等。

答案 1 :(得分:3)

您必须删除前导斜杠,以便模式*~在回购中的所有目录中匹配。