.gitignore忽略其中带有#的临时文件名的模式是什么

时间:2018-09-18 17:33:40

标签: git

我有一些临时文件,名为:

#myfile#
.#anotherfile
./some/dir/#myfile#
./somewhere/.#anotherfile

我尝试添加(对我来说)明显的模式,请参见下面的命令

cat >> .gitignore <<EOF
#.*
.*#.*
EOF

但是git status仍然列出文件。

我意识到井号'#'是注释字符,因此我尝试引用它并添加:

\#.*
.*\#.*

但是那也不起作用。

搜索它没有给我答案,但是让我意识到git没有使用正则表达式语法,因此我的猜测无效 用于git。

一些很好的搜索是

我的.gitignore现在具有:

\#*#
.\#*#

我现在只有一种需要修复的模式:

./somewhere/.#anotherfile

2 个答案:

答案 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