TortoiseGit修改的符号(图标覆盖)未更新


75

我对某些代码进行了少量更改,但TortoiseGit将其显示为已修改(红色感叹号),尽管我已提交,拉出,推入,但它仍然存在。我应该在这里做什么?我以前没有看过这个问题。


比较一下,您应该可以看到更改了。这也可能是TortoiseGit图标刷新问题
CharlesB 2011年

Answers:


120

我假设您使用的是乌龟git?我以前遇到过这个问题,有时会按F5一下修复它,而在乌龟重新同步后它消失了。

这是另一个可能的修复链接

当前的解决方法是使用Windows任务管理器杀死TGitCache.exe。


1
我认为它是乌龟-谢谢,我会尝试的。在弄乱了代码之后,我所做的就是将备份文件复制回去。
Bookman 2011年

1
确保您确实已提交更改。通过右键单击-> tortoiseGit->“检查修改”,可以查看文件是否具有本地修改,这会引起红色惊叹号。
安迪

3
投票杀死TGitCache.exe。几秒钟后,它将自动重新开始。
萨沙2014年

5
4年后,问题仍然存在,并且没有比杀死TGitCache更好的解决方法了……TortoiseGit团队确实需要修复此问题。如果覆盖不能反映仓库的当前状态,则它们是无用的。
Thomas Levesque 2015年

1
F5不能解决问题,但是杀死TGitCache.exe为我修复了该问题。赞!
加布里埃尔·豪克洛格

41

对我有帮助的是:

  1. 转到“设置->图标叠加”,在“状态缓存”下选中选项“无”
  2. 刷新浏览器F5
  3. 返回并将缓存选项更改回“默认”

3
它不工作...它返回时的默认选择...更新错误状态回:有必要“走过”目录树..现在它显示正确的图标。
Maxim

13

Kill TGitCache.exe对我有用。....我将此作为答案,因为我没有足够的声誉积分才能将其添加为评论。但想帮助进一步迭代这是一个可行的解决方案。


1
如果这是一个有效答案,那么将其作为答案没有任何危害。也许您可能想提供更多有关如何解决问题的详细信息。
Kmeixner,2015年

这是唯一对我有用的方法,但是我不知道杀死TGitCache.exe是否安全。我似乎很安全,但是也许我只是在踢罐子。
卢卡斯

与Andy的解决方案重复的解决方案已有5年了。
塔利亚

13

我尝试了一种解决方法:

重命名存储库的目录,然后将其改回即可。

例如:MyComplexProject可以更改为MyComplexProject1,然后再更改为MyComplexProject


2
如果它是疯狂的并且有效,那么它并不疯狂。谢谢你!
xandermonkey '16

1
在终止缓存过程失败后,此方法起作用。一个文件困扰了我几个月。
艾丽卡·凯恩

这应该是公认的解决方案,因为这实际上迫使TortoiseGit清除图标覆盖缓存。杀死整个过程似乎有些矫kill过正。
Extragorey

10

除了@Andy提到的内容外,您还可以通过限制必须监视的文件夹来使覆盖层更快地工作。

右键单击-> TortoiseGit->设置->图标叠加

在此输入包含和排除路径。我通常会明确指出我的存储库/工作副本:

在此处输入图片说明


8

请检查您的路径以查看是否匹配。

Some/Dir/SomeFile.ext

与Windows相同

some/DIR/someFILE.EXT

但是对于Git,它们位于不同的位置。通过使用合适的机壳从顶部导航回来可以解决此问题。


1
在我的情况下,Visual Studio将一个名为“ resource.h”的文件重命名为“ Resource.h”。
kol

叮叮叮。这就是正在发生的事情。谢谢。
DrFloyd20年

8

我在Windows上遇到了同样的问题。

杀死TGitCache确实可以工作几秒钟,但是红色图标再次出现。

事实证明,该文件在本地已重命名(首字母从大写更改为小写),但在Git中未更改。Windows不区分大小写,但Git区分大小写!因此,图标叠加层不再匹配。我确实是通过删除特定文件并从Turtoise Git上下文菜单中选择“还原”来发现的。在列表中,确实显示了两个文件,一个文件的首字母大写,另一个完整的小写。

最后,从Git上下文菜单重命名文件确实为我解决了该问题。


4
该线程于11年11月15日开始。今天是2018年3月27日。那么,超过6年了,还没有解决方案吗?来吧乌龟!
JohnCz

1
在我的情况下,gitlab GUI显示了两个大小写不同的文件。在GUI中删除其中之一,拉出更改并还原更改可以解决问题。
aleha

1
这是我的问题。我在项目中更改了图像扩展名的大小写,只是恢复为旧名称。
TazAstroSpacial

1
完美,谢谢您的提示!什么时候停止这种区分大小写的疯狂;)
jaz

5

当图标未更新时,您可以使用以下“运行”命令快速终止图标覆盖缓存:

taskkill /f /im tgitcache.exe

缓存过程应自动重启。如果发现它经常发生,您甚至可以将其变成桌面快捷方式。


2

这里没有其他选择可以使问题消失。(我无法识别出大小写有所变化的任何文件)。我非常有信心所有内容都已按原样签入,因此我只是删除了我的仓库并再次签出。of,再次起作用。

如果您不太自信(或者最好只是不想冒险),请稍稍重新命名您的repo文件夹并再次检查您的repo,然后您可以拉一个diff来查看是否缺少任何奇怪的东西/在两个仓库文件夹之间更改。


2

这是TortoiseGit中的一个已知问题。它存在多年,而且显然永远不会被修复。我不知道这是因为TortoiseGit开发人员不愿意还是无法做到。(我之前也已经报告过,但是现在找不到问题了。)

无论如何,这是我要解决的方法:

git gc --prune=all --quiet

它会修剪Git存储库,重新打包所有这些单个目标文件,将其中的文件数量.git从数万个减少到20个以下,并可能改善Git操作的整体性能。

有时候,Git在提交后会自己做一个轻量级的版本,但是我很少见过这种情况会在多年的日常使用中发生。所以我自己做。这也是在备份系统之前要考虑的一项好措施(请参阅下文)。

为了简化操作,我git-gcall.cmd在可访问的路径中创建了一个批处理文件,该文件调用了上面显示的命令。实际上,我必须在每次提交后运行它,并且在2-3秒后图标会自动更新。不涉及杀戮。只是稍微唤醒TortoiseGit才能实际观察存储库并更新其状态。


这是一个PowerShell脚本,如果需要,可在一组配置的目录中递归运行此命令,以在进行备份之前使用。它也可以定期运行,例如整夜运行,以解决后台过时的图标问题。

gc-all-git.ps1:

Write-Host "Packing Git repositories where necessary..."

function Git-Gc($path)
{
    cd $path
    Get-ChildItem . -Recurse -Hidden .git | Foreach-Object {
        cd $_.FullName
        if ((Get-ChildItem objects -File -Recurse).Count -gt 50)
        {
            cd ../
            Write-Host $(Get-Location).Path
            git gc --prune=all --quiet
        }
    }
}

Git-Gc C:\Source
Git-Gc C:\xampp\htdocs

使用通常所需的随附批处理文件来调用它:

gc-all-git.cmd:

@echo off
cd /d "%~dp0"
%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy unrestricted -File gc-all-git.ps1
exit /b %errorlevel%

1

我认为发生此问题是由于应用程序竞争Windows限制图标覆盖(我认为最多允许15个)。

这是我必须解决的问题:

  1. 打开regedit并浏览到该Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers键。
  2. 通过在前缀前面加上空格,将子键重新排列为Tortoise *键在顶部。
  3. 使用任务管理器重新启动Windows资源管理器。

另请参阅:TortoiseGit不显示图标覆盖


1

为我们解决了这个问题的是,我们已将Git存储库移至映射的网络驱动器,从而更改了驱动器号。

似乎需要将TortoiseGit设置为监视网络驱动器-这不是默认行为。

因此,要解决此问题,您将:

  • 右键单击一个repo文件夹
  • 选择“ TortoiseGit”
  • 选择“设置”
  • 选择“图标叠加层”
  • 勾选“网络驱动器”

任务完成。


0

这可能会有所帮助...我的驱动器号是B:并且覆盖图标不会更新。我将其更改为C:之外(我使用M :),然后它开始工作。看起来TGIT不会在C以下驱动:


在图标覆盖下有一个单独的设置,其中包括“ Drives A:and B:”(驱动器A:和B :)-这些字母通常一直用于软盘驱动器。
PeterJ

0

在对此感到惊讶并尝试了几乎所有内容之后,我设法通过简单地从标记为已修改的目录中删除一个文件,然后从TortoiseGit菜单本身还原该文件来解决该问题。

PS我确保此操作前后,整个目录的CRC64校验和是相同的。


0

不知道这是否相关。

看起来TortoiseGit的文件/文件夹盒存在缓存问题。

就我而言,由于文件夹的大小写与预期的不符,因此图标的叠加层没有显示

文件夹名称zeta中Z大小写的区别

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.