从存储库中删除奇怪的'Iconr'文件

时间:2014-03-23 11:02:34

标签: macos git atlassian-sourcetree

在我的git存储库中,我在暂存区域中有一个奇怪的文件,拒绝被还原,删除,提交 - 基本上我无法让它消失 ..

该文件必须是文件夹中存放多年的一些古老的OS 9文件。

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

然而,它被困在那里。

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

  

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

任何想法如何让git 完全忘记关于该文件?

6 个答案:

答案 0 :(得分:27)

答案 1 :(得分:9)

最好还原到命令行以获得更准确的错误消息。

您可以尝试git add -u,然后点击git commit,以便在回购邮件中注册该文件的删除。
见" git status says file is deleted but git rm says error: pathspec '…' did not match any files"举个例子。

您还可以预览git clean会给出的内容:git clean -d -x -n(如" Why is there no “pathspec” when I try to remove a folder in Git?"中所述)

另一个问题是当前分支中的文件没有被跟踪,但是在另一个分支中被跟踪。请参阅that answer以检查是否属实。

答案 2 :(得分:2)

作为一般解决方法,可以编辑.gitignore文件以完全忽略此博客条目中描述的Icon\r文件:Git Tip: Ignoring Icon\r in .gitignore

答案 3 :(得分:2)

类似Icon^M的文件很可能是由某些外部应用创建的,例如Folderol突出显示您的文件夹。

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

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

这是一个shell命令。或者将其添加为Icon??,或者您可以通过 Control - V 重新生成^M特殊字符并点击 Enter 。< / SUP>

相关:How to ignore Icon? in git

如果您不想将此更改提交到您的存储库,请将其添加到您的全局.gitignore或将其添加到.git/info/exclude

请参阅:Using Git / Ignoring files

要删除文件,请尝试:

find . -type f -name 'Icon?' -print -delete

或者,如果他们是唯一未分阶段的人,请运行:git clean -f

答案 4 :(得分:1)

显示为&#34; Iconr&#34;在SourceTree中真的是&#34; Icon \ r&#34;其中\ r是十六进制值0x0d。

.gitignore文件名模式匹配与POSIX正则表达式相比有限。正则表达式模式,例如&#34; Icon \ r&#34;和&#34; Icon \ x0d&#34;使用SourceTree对我不起作用。

简单忽略:在.gitignore文件中添加Icon?模式可以使&#34; Iconr&#34; SourceTree中忽略的文件。

警告:Icon?使用?这是一个单字符通配符。所以,文件如&#34; Icon \ r&#34;,&#34; icona&#34;和&#34; icon3&#34;将被Icon?模式忽略。因此,如果需要,请使用文件名Icon01icon02iconaa代替Icon1icon2icona,并使用此解决方法添加此类文件到git。

精确忽略:使用binhex编辑器可以忽略精确的Iconr文件名。

在binhex编辑器中,添加0a 49 63 6e 6e 0d 0d 0a。额外的0a是换行符,以支持&#39; Icon \ r \ n&r;&#39;以后编辑其他unix文件。

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

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

答案 5 :(得分:0)

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

// .gitignore
**/Icon?

通配符从git 1.8.2版开始可用