.gitignore文件没有忽略子目录中的文件

4

我在存储库的顶层文件夹中有一个.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

类似问题

我看到过几个非常相似的问题,比如这个或者这个。解决方法是删除之前添加的文件,然后按照以下说明重新添加整个仓库:

git rm -rf --cached .
git add *

然而,我尝试了一下,没有任何区别。有人知道为什么会出现这种情况吗?

1
你尝试过将 /*~ 改为 *~ 吗? - Jack Bracken
@JackBracken 好的,那就是问题所在。非常感谢!!如果您将其作为答案提交,我会进行验证。 - Jalo
2个回答

5
您可以在此处找到有关gitignore语法的文档:git-scm.com/docs/gitignore 可能有一个问题是您的/*~,因为单个*并不像您期望的那样工作:
例如,“Documentation / * .html”匹配“Documentation / git.html”,但不匹配“Documentation / ppc / ppc.html”或“tools / perf / Documentation / perf.html”。
您必须使用**代替:
• 以斜杠结尾的 "* *" 匹配内部所有内容。 例如,"abc/**" 匹配相对于.gitignore文件位置的目录 "abc" 中的所有文件,无限深度。
• 斜杠后跟两个连续的星号然后是斜杠,匹配零个或多个目录。 例如,"a/**/b" 匹配 "a/b"、"a/x/b"、"a/x/y/b" 等等。

3

您需要删除前导斜杠,以便模式*〜可以在存储库中的所有目录中匹配。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接