我有一些临时文件,名为:
#myfile#
.#anotherfile
./some/dir/#myfile#
./somewhere/.#anotherfile
我尝试添加(对我来说)明显的模式,请参见下面的命令
cat >> .gitignore <<EOF
#.*
.*#.*
EOF
但是git status仍然列出文件。
我意识到井号'#'是注释字符,因此我尝试引用它并添加:
\#.*
.*\#.*
但是那也不起作用。
搜索它没有给我答案,但是让我意识到git没有使用正则表达式语法,因此我的猜测无效 用于git。
一些很好的搜索是
git ignore filenames which contain -这未解决如何处理井号#注释字符
add #*# glob to .gitignore?-这修复了其中一个。
我的.gitignore现在具有:
\#*#
.\#*#
我现在只有一种需要修复的模式:
./somewhere/.#anotherfile
答案 0 :(得分:0)
由于*#*
匹配零个或多个任何字符(在名称组成部分内),因此右球形为*
。
仅当#
是第一个字符时,才需要反斜杠。既然不是,那你就不用。 ("If it was so, it might be; if it were so, it would be; but as it isn't, it ain't.")也就是说,如果您想忽略#ignoreme
和#thistoo
之类的文件,而 not 忽略commit#me
,则希望{{ 1}},并且由于#*
以#*
开始,因此您必须将其写为#
。
(此外:Git的忽略模式匹配器故意违反星与前导点不匹配的行为,即\#*
匹配*foo
,即使sh / bash {{1} }与.foo
不匹配。也就是说,Git使用the POSIX fnmatch
rules就像*foo
没有设置 。)
答案 1 :(得分:0)
@torek,感谢您的回答。我只尝试了*#*
,但没有成功。
通过实验,我发现以下方法可以工作:
**.\#* => handles .#tempfile and sub/dirs/.#tempfile, .#tempfile#, sub/dir/.#tempfile#
**\#* => handles #tempfile, sub/dirs/#tempfile, and #tempfile#, sub/dir/#tempfile#
我已经注释了该模式以显示其匹配的文件,但是显然=> text
不在.gitignore文件中。对我来说这很好,所以可以解决我的问题。
为了测试,我使用了以下.gitignore。
**.\#*
**\#*
使用这些文件:
touch '.#file'
touch '.#file#'
touch '#file'
touch '#file#'
touch 'commit#file'
touch 'bin/.#file'
touch 'bin/.#file#'
touch 'bin/#file'
touch 'bin/#file#'
touch 'bin/commit#file'
我测试此文件时,所有文件都被过滤掉了。
注意:文件 commit#file 和 bin / commit#file 也已被过滤掉。我想要这个,但其他人可能不需要。
在git-bash(在Windows上为v 2.17.1)和git(1.8.x.x)在Linux上进行了测试。
我在github上创建了一个小型测试仓库来显示这一点。看到 https://github.com/steranka/git-ignore-test