最近使用 TortoiseGit 时遇到了一个小问题:仓库已经初始化,右键菜单也能正常使用,但文件和文件夹左下角一直没有状态图标。
正常情况下,没有修改的文件会显示绿色对号,修改过的文件会显示红色感叹号。我这里两种图标都没有,最后通过调整注册表中的排列顺序解决了,记录一下处理过程。
先确认仓库是否正常
在仓库目录打开 Git Bash,在已经初始化的仓库,右键Open Git Bash here执行:
git status
我这里能正常显示当前分支,也能识别出修改过的文件,说明 Git 可以正常读取仓库。接下来就主要检查 TortoiseGit 的图标显示设置。
需要注意,如果只是刚初始化仓库,文件还没有加入版本管理,也不能直接用"有没有绿色对号"来判断是否正常。
检查 TortoiseGit 设置
在文件夹空白处右键,进入:
TortoiseGit → 设置 → 图标覆盖

主要检查下面几项:
-
状态缓存选择"默认"。
-
勾选"本地硬盘"。
-
"排除路径"里没有自己的仓库目录。
我这里这几项都是正常的,不过在"覆盖处理器"页面看到了一条提示:除了 Tortoise,还有 16 个已安装的图标覆盖。

看到这里,基本就有排查方向了。
调整注册表中的图标优先顺序
按 Win + R,输入:
regedit
打开注册表编辑器,进入下面的位置:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers
我这里可以看到,OneDrive 和 WorkspaceExt 的一大批项目排在前面,Tortoise 的项目排在后面。

Windows 能加载的覆盖图标数量有限,前面的项目占用名额后,后面的就可能无法显示。TortoiseGit 官方 FAQ 也提到了这种情况,可以通过在项目名称前添加空格,提高排列优先级。
修改前,先右键 ShellIconOverlayIdentifiers,选择"导出",保存一份备份。
然后找到这三个项目:
Tortoise1Normal
Tortoise2Modified
Tortoise3Conflict
分别按 F2 重命名,在每个名称前面增加几个英文半角空格。我这里加了 6 个(如果6个还不能移动到前面,再继续增加)然后按F5刷写,或者重新打开注册表,修改后类似这样:
Tortoise1Normal
Tortoise2Modified
Tortoise3Conflict

关键是刷新或重新打开注册表后,确认它们排到了 OneDrive、WorkspaceExt 等项目前面。
这里只修改左侧项目名称,右侧的值保持原样,其他软件的项目也不用删除。
重启后恢复正常
修改完成后重启电脑,再打开仓库目录,状态图标就恢复了。
因为我当时还有一个文件没有提交,所以显示的是红色感叹号,这也是正常的。绿色对号表示文件已经纳入版本管理,并且当前没有修改。

如果还想显示更多状态,可以按需把下面三个项目也调整到前面:
-
Tortoise6Deleted:删除状态。 -
Tortoise7Added:新增文件已暂存、尚未提交的状态。 -
Tortoise9Unversioned:未跟踪标记
日常使用的话,先保证正常、修改、冲突这三个图标能显示就够了,不需要把所有项目都往前移。
这次遇到的问题,调整注册表排序后就解决了。如果你也是右键菜单正常、Git 状态正常,但文件一直没有小图标,可以检查一下这里。