59

在尝试使用 git 设置保管箱文件夹时,我看到了一个不是我创建的“Icon\r”文件。我尝试在 ~/.gitignore 文件中忽略它。但是添加Icon\r Icon\r\r Icon?根本不起作用。

4

9 回答 9

67

你也可以使用vim

  1. vim .gitignore
  2. 在新行中写入Icon,然后
  3. ctrl+v然后按Enter
  4. 重复步骤 3
  5. 保存并退出(快捷键ZZ:)

现在你应该已经Icon^M^M完成​​了:)

为了更智能地使用,您可以将其添加到 .gitignore 全局配置文件中~/.gitignore_global

于 2014-01-14T10:52:42.860 回答
45

(根据hidn解释,根据robotspacer的建议,这改进了原始答案。)

Icon?是 OS X 文件夹图标的文件。" ?" 是双回车 ( \r\r) 的特殊字符。

要告诉git忽略它,请打开终端并导航到您的存储库文件夹。然后输入:

printf "Icon\r\r" >> .gitignore

如果文件不存在,它将被创建并Icon\r\r成为它的一行。如果文件确实存在,则该行将Icon\r\r附加到它。

于 2015-06-10T11:45:58.563 回答
36

"Icon[\r]"可能是一个更好的选择。
在 vim 中,您只需输入Icon[^M],Icon[后面跟着CtrlV, Enterthen ]

问题"Icon\r\r"在于 EOL 转换。

整行实际上是"Icon\r\r\n",数行结束。根据您的设置,CRLF可能会转换为LF提交时,因此您的存储库实际上将具有"Icon\r\n". 假设您将更改同步到另一个存储库。您将进入"Icon\r\n"该工作目录,该目录忽略Icon但不忽略Icon^M. 如果你进一步编辑.gitignore并在那里提交,你最终会"Icon\n"- 完全输掉\r

我在一个项目中遇到了这个问题,其中一些在 OS X 上开发,而一些在 Windows 上。通过使用括号分隔\r和行结束,我不必重复\r两次,也不担心 EOL 转换。

于 2015-11-28T17:07:44.460 回答
22

最好的地方是在你的全局 gitignore 配置文件中。您可以创建此文件,访问它,然后按照以下步骤进行编辑:

>> git config --global core.excludesfile ~/.gitignore_global

>> vim ~/.gitignore_global

按下i进入插入模式

Icon在新行上键入

而在同一行,ctrl+ v, enter, ctrl+ v,enter

esc, 然后shift+;然后输入wq然后点击enter

于 2015-07-03T19:55:35.893 回答
12

关于命名(和引用)事物:首先,更多人会因为知道ANSI-C 引用可用于明确匹配 macOS 图标文件而受益。Icon$'\r'or和都$'Icon\r'可以在 Bash 和 Zsh 以及大多数其他现代 shell 中工作,我希望,比如 Fish。

保持您的 .gitignore 可编辑:虽然我对此处其他答案提供的字节级操作印象深刻,但这些方法在实践中很脆弱。简而言之,程序员倾向于使用文本编辑器,其中许多编辑器被配置为在保存文件时更改行尾。(例如,请参阅this 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

这就是你想要的。

长期建议\r如果 Git 支持.gitconfig 文件中的转义,这个问题将很容易解决。可以简单地写:

# .gitignore
Icon[\r]

所以我建议我们与Git 社区合作并尝试实现这一目标。

(如果您确实想涉足并向 Git 提出补丁建议,请务必阅读第一的。)

参考

gitignore 文档

否则,Git 将模式视为 shell glob:“*”匹配除“/”、“?”之外的任何内容 匹配除“/”之外的任何一个字符,“[]”匹配选定范围内的一个字符。有关更详细的说明,请参见 fnmatch(3) 和 FNM_PATHNAME 标志。

有关 .gitignore 文件中方括号语法和否定语法的良好示例,请参阅这篇 linuxize.com 文章

对于那些想要深入了解 Git 源代码中模式匹配如何随时间变化的人,您可以在 GitHub 上的 git 存储库中运行此搜索以查找使用fnmatch

于 2020-12-23T18:16:18.297 回答
11

图标?是 OSX 文件夹图标的文件。事实证明,这\r实际上是 CRLF。所以我使用 ruby​​ 将行添加到.gitignore文件中。打开终端并导航到home文件夹,然后:

> irb
>> f = File.open(".gitignore", "a+") #<File:.gitignore>
>> f.write("Icon\r\r")  # output a integer
>> f.close
>> exit
于 2013-07-09T19:07:39.903 回答
2

对我来说,这在 TextMate:中有效Icon<CR><CR>。是<CR>一个回车符,ctrl-alt-return在键盘上。您还可以在标准 Character Viewer 应用程序中搜索cr. 请注意,<CR>是一个不可见的字符,所以它只有在编辑器设置为显示它们时才可见。

在此处输入图像描述

于 2017-02-21T14:02:52.640 回答
1

我只是发布一个更新答案,因为上面的答案对我不起作用,但实际上只是添加Icon?了我的.gitignore工作。如果您在 Finder 上查看您的名称文件,它实际上就是它的显示方式。

于 2021-02-22T14:30:01.057 回答
1

Icon[\r]对我不起作用。我不得不在.gitignore...中使用以下内容

Icon*

我还添加Icon*到我的 Settings > Core > Ignored Names in Atom...

.git, .hg, .svn, .DS_Store, ._*, Thumbs.db, desktop.inis, Icon*
于 2021-06-01T23:15:59.217 回答