关于命名(和引用)事物:首先,知道ANSI-C Quoting 可用于明确匹配 macOS 图标文件,将会有更多人受益。 Icon$'\r' 或 $'Icon\r' 都可以在 Bash 和 Zsh 以及大多数其他现代 shell 中工作,我希望,比如 Fish。
保持您的 .gitignore 可编辑:虽然我对此处其他答案提供的字节级操作印象深刻,但这些方法在实践中很脆弱。简而言之,程序员倾向于使用文本编辑器,其中许多编辑器被配置为在保存文件时更改行尾。 (例如,请参阅此VS Code discussion about line ending normalization。)
您希望编辑器撤消您仔细的字节编辑吗?当然不是。所以也许你发现配置你的编辑器这样既实用又方便,这样它就不会影响行尾。您可能会查看(a)特定于编辑器的配置设置;或 (b) 跨编辑器配置(即EditorConfig)。
但这变得复杂而混乱。如果想要更简单、更灵活的方式,请在您的 .gitignore 文件中使用:
# .gitignore
Icon?
![iI]con[_a-zA-Z0-9]
模式说明:
- 使用
Icon?,因为gitignore 格式不支持\r 作为转义码。
- 使用
[iI],因为 Git 可能区分大小写。
- 使用
[_a-zA-Z0-9]捕捉很多常见的ASCII字符;您可能想扩大范围。
您可以测试您的 gitignore 模式是否按预期工作:
git check-ignore -v *
例如,为了测试,将这些文件放在一个目录中:
-rw-r--r--@ Icon?
-rw-r--r-- icon8
drwxr-xr-x icons
-rw-r--r-- iconography
...git check-ignore -v * 的结果是:
/Users/abc/.gitignore:3:Icon? "Icon\r"
/Users/abc/.gitignore:4:![iI]con[_a-zA-Z0-9] icon_
/Users/abc/.gitignore:4:![iI]con[_a-zA-Z0-9] icons
这就是你想要的。
长期建议如果 Git 支持 .gitconfig 文件中的 \r 转义,这个问题将很容易解决。可以简单地写:
# .gitignore
Icon[\r]
所以我建议我们与Git community 合作并尝试实现这一目标。
(如果您确实想涉足并向 Git 提出补丁建议,请务必先阅读 。)
参考文献
来自gitignore documentation:
否则,Git 将模式视为 shell glob:“*”匹配除“/”、“?”之外的任何内容匹配除“/”之外的任何一个字符,“[]”匹配选定范围内的一个字符。有关更详细的说明,请参见 fnmatch(3) 和 FNM_PATHNAME 标志。
有关 .gitignore 文件中方括号语法和否定语法的良好示例,请参阅 This linuxize.com article。
对于那些想要深入了解 Git 源代码中模式匹配如何随时间变化的用户,您可以运行此search for uses of fnmatch in the git repository on GitHub。