在我的git存储库中,我在暂存区域中有一个奇怪的文件,拒绝被还原,删除,提交 - 基本上我无法让它消失 ..
该文件必须是文件夹中存放多年的一些古老的OS 9文件。
几天前我已经删除了文件系统中的文件,所以现在git正在跟踪Iconr
的删除。
然而,它被困在那里。
我通过SourceTree(我的git UI客户端)获得的错误是
致命:pathspec'文件夹/ Iconr'与任何文件都不匹配
任何想法如何让git 完全忘记关于该文件?
答案 0 :(得分:27)
添加一行
Icon?
到.gitignore为我工作。
答案 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>
如果您不想将此更改提交到您的存储库,请将其添加到您的全局.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?
模式忽略。因此,如果需要,请使用文件名Icon01
,icon02
,iconaa
代替Icon1
,icon2
,icona
,并使用此解决方法添加此类文件到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版开始可用