Macos 移除怪异的';Iconr&x27;存储库中的文件

Macos 移除怪异的';Iconr&x27;存储库中的文件,macos,git,atlassian-sourcetree,Macos,Git,Atlassian Sourcetree,在我的git存储库中,我在暂存区有一个奇怪的文件,它拒绝被恢复、删除和提交——基本上我无法让它消失 该文件必须是某个古老的OS9文件,在文件夹中存放多年 几天前,我已经删除了文件系统中的文件,所以现在git正在跟踪对Iconr的删除 然而,它被卡在那里了 我通过SourceTree(我的git UI客户端)得到的错误是 致命:pathspec“文件夹/Iconr”与任何文件都不匹配 你知道如何让git完全忘记该文件吗?为了得到更准确的错误消息,最好返回到命令行 在那里,您可以尝试执行git ad

在我的git存储库中,我在暂存区有一个奇怪的文件,它拒绝被恢复、删除和提交——基本上我无法让它消失

该文件必须是某个古老的OS9文件,在文件夹中存放多年

几天前,我已经删除了文件系统中的文件,所以现在git正在跟踪对
Iconr
的删除

然而,它被卡在那里了

我通过SourceTree(我的git UI客户端)得到的错误是

致命:pathspec“文件夹/Iconr”与任何文件都不匹配


你知道如何让git完全忘记该文件吗?

为了得到更准确的错误消息,最好返回到命令行

在那里,您可以尝试执行
git add-u
,然后执行
git commit
,以便在repo中注册删除该文件。
以“”为例

您还可以预览git clean将提供什么:
git clean-d-x-n
(如“”中所述)


另一个问题是,在当前分支中根本不跟踪该文件,而是在另一个分支中跟踪该文件。查看以检查是否是这种情况。

作为一般解决方法,可以编辑
.gitignore
文件以完全忽略
图标\r
文件,如本博客中所述:

添加一行

Icon?
对,我为他工作


图标^M类文件很可能是由一些外部应用程序创建的,例如突出显示文件夹的应用程序

您应该删除正在执行此操作的应用程序,或者在
.gitignore
文件中忽略它,例如

printf "Icon\r\r" >> .gitignore
这是一个shell命令。或者将其添加为
图标???
,或者您可以通过Control-V并按Enter键复制
^M
特殊字符

相关的:

如果不想将此更改提交到存储库中,也可以将其添加到全局
.gitignore
或添加到
.git/info/exclude

请参阅:

要自行删除文件,请尝试:

find . -type f -name 'Icon?' -print -delete
或者,如果它们是唯一未老化的,请运行:
git clean-f

在SourceTree中显示为“Iconr”的实际上是
图标\r
,其中
\r
是十六进制值
0x0d

与POSIX正则表达式相比,.gitignore文件名模式匹配受到限制。诸如
Icon\r
Icon\x0d
之类的正则表达式模式在SourceTree中不适用

简单忽略:在.gitignore文件中添加
图标?
模式将使SourceTree中的“Iconr”文件被忽略

注意:
图标?
使用
这是一个单字符通配符。因此,像
Icon\r
、“icona”、“icon3”和“Icons”这样的文件和文件夹将以
Icon?
模式忽略。如果需要,可以使用文件名“Icon01”、“icon02”、“iconaa”而不是“Icon1”、“icon2”、“icona”,通过此解决方法将此类文件添加到git

精确忽略:可以使用binhex编辑器忽略精确的
图标\r
文件名

在binhex编辑器中,在.gitignore文件中添加
0a 49 63 6f 6e 0d 0d 0a
。额外的
0a
s是换行符,用于括起
图标\r\r
,以便以后编辑其他unix文件

警告:如果使用精确值
49 63 6f 6e 0d
,请小心不要将
\r
替换为
\n
。换句话说,不要在设置为使用此方法自动替换行分隔符的文本编辑器中编辑.gitignore

注意:简单忽略
图标?
对于大多数用例来说是方便和足够的。退出并重新启动SourceTree以查看更改是否生效。默认情况下,macOS的git不区分大小写

自定义文件夹/文件图标:每次将自定义图标添加到文件夹或文件时,都会创建一个
图标\r
文件。例如,可以通过“获取信息”窗口添加自定义图标。以下是默认系统文件夹图标已替换为自定义文件夹图标的示例:


图标\r
文件可以通过文件/文件夹的“获取信息”窗口手动删除,或者调用shell命令删除
图标\r
文件,如kenorb的回答中所述。

您可以使用通配符忽略任何级别的子文件夹上的
图标?

// .gitignore
**/Icon?

通配符从git的1.8.2版开始工作

文件名可能真正被称为
图标\r
-可能UI客户端没有正确显示它。尾随换行符可以使各种工具跳闸,但在从命令调用时应由git处理line@cacau事实上,在命令行上它说“Icon\r”参见放大:将“Icon”添加到.gitignore会导致忽略“Icon\r”。自从是单字符通配符,则Iconx、Icon1等名称也将被忽略。但是,“图标”很容易使用任何文本编辑器应用。。。并且对于许多用例来说已经足够了。将“Icon?”添加到。gitignore对我有用。“Icon”或“Iconr”或“Icon\r”没有。这是一个比公认答案更好的答案。Icon\r和其他几个变体是OSX填充到目录中的文件,表示自定义文件夹图标。有很多类似的变体,都有一个额外的字符,但这个答案涵盖了所有的变体。一个问号对我来说很有用-键入f-name“Icon?”-print-delete您不需要在此处进行全局搜索。如果删除前导的
/
,它将被递归搜索。