我的存储库顶级文件夹中有一个 .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 one或this one。他们的解决方案是删除以前添加的文件,然后按照以下说明再次添加整个存储库:
git rm -rf --cached .
git add *
然而,我尝试了它并没有区别。任何人都知道为什么会这样?
答案 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)
您必须删除前导斜杠,以便模式*~
在回购中的所有目录中匹配。