乌龟Git的修改标志(图标叠加)没有更新

85

我在代码中做了一个小的更改,但是TortoiseGit显示它为修改状态(红色感叹号),尽管我已经提交、拉取、推送,但仍然保持不变。这里该怎么办?我以前没有遇到过这个问题。


取一个 diff,您应该能够看到发生了什么变化。这也可能是 TortoiseGit 图标刷新问题。 - CharlesB
19个回答

130

我假设你正在使用tortoise git?我之前也遇到过这个问题,有时候按下键可以解决,其他时候则是等待tortoise自行同步即可消失。

这里还有另一个可能的解决方法,请参考链接

当前的解决办法是使用Windows任务管理器结束TGitCache.exe进程。


1
我认为这是乌龟 - 谢谢,我会尝试的。我所做的就是在代码搞砸后复制了一个备份文件。 - Booksman
1
请确保您已经提交了更改。您可以通过右键单击->TortoiseGit->“检查修改”来查看文件是否有本地修改,这会导致出现红色感叹号。 - Andy
3
投票支持杀死TGitCache.exe。几秒钟后它会自动重新启动。 - Sasha
6
四年后,这个问题仍然存在,没有比终止 TGitCache 更好的解决方法... TortoiseGit 团队真的需要修复这个问题。如果覆盖物不能反映仓库的当前状态,那么它们就是无用的。 - Thomas Levesque
1
F5没有解决问题,但是杀掉TGitCache.exe对我有用。点赞! - Gabriel Hautclocq
显示剩余4条评论

56

对我有帮助的是以下方法:

  1. 进入 "设置 -> 图标叠加",勾选 "状态缓存" 下的选项 "无"
  2. 按 F5 刷新资源管理器
  3. 返回并将缓存选项更改回 "默认"

4
选择默认选项时,它无法正常工作...会返回错误的状态。更新:需要“遍历”目录树...现在显示正确的图标。 - Maxim

17

这里有一个我尝试过的解决方法:

将存储库目录重命名,然后再将其改回来,就可以了!

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


2
如果它看起来很疯狂,但它能够工作,那就不是疯狂的。谢谢这句话! - xandermonkey
1
在清除缓存进程失败后,这个方法终于奏效了;有一个文件一直困扰我好几个月了。 - Erica Kane
这应该是被接受的解决方案,因为它实际上强制TortoiseGit清除图标叠加缓存。终止整个进程似乎有些过度杀伤力。 - Extragorey
简单而强大的解决方法!对我很有效! - Ashish Emmanuel
这是唯一可行的解决方案或者说是“黑科技” :) - Ameya721

16

Kill TGitCache.exe对我有用。......我把它作为答案,因为我没有足够的声望分数将其添加为评论。但想要进一步说明它是一个有效的解决方案。


1
如果这是一个有效的答案,那么将其作为答案并没有什么害处。也许您想提供一些更详细的信息来解决问题。 - Kmeixner
这是我唯一有效的方法,但我不确定直接终止TGitCache.exe是否安全。看起来很安全,但也许我只是把问题推到了后面。 - Lucas
复制了5年前Andy的解决方案。 - Thalia

13

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

杀掉TGitCache确实可以解决问题,但红色图标几秒钟后又出现了。

原来文件被本地重命名(首字母从大写改为小写),但在Git中没有更改。Windows不区分大小写,但Git有区别!因此图标覆盖不再匹配。我是通过从Turtoise Git上下文菜单中删除特定文件并选择“还原”来找到这个问题的。在列表中,出现了两个文件,一个首字母大写,另一个完全小写。

最终,通过Git上下文菜单将文件重命名解决了我的问题。


4
这个帖子始于2011年11月15日,今天是2018年3月27日。 6年多过去了,还没有解决方案?加油啊Tortoise! - JohnCz
1
在我的情况下,GitLab GUI 显示了两个大小写不同的文件。在 GUI 中删除其中一个文件,拉取更改,然后还原更改解决了问题。 - aleha_84
1
这是我的问题。我在项目中更改了图像扩展名的大小写,现在我只是恢复了旧名称。 - TazAstroSpacial
1
非常好,感谢您的提示!这种大小写敏感的疯狂什么时候才会停止呢?;) - jaz
对于任何想要调整文件名大小写的人,您可以使用“TortoiseGit > 重命名...”选项。如果此选项未显示,请先删除文件,然后再还原它。 - avgcoder

11
请检查您的路径以查看它是否匹配大小写。
Some/Dir/SomeFile.ext

对于 Windows 来说是相同的

some/DIR/someFILE.EXT

但对于 Git 而言,它们位于不同的位置。通过使用正确的大小写从顶部导航回来可以解决这个问题。


2
在我的情况下,一个名为 "resource.h" 的文件被 Visual Studio 重命名为 "Resource.h"。 - kol
2
叮叮叮。这就是正在发生的事情。谢谢。 - DrFloyd5

10

除了 @Andy 提到的内容外,您还可以通过限制需要监视的文件夹来加快叠加功能的速度。

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

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

输入图像描述


6

当图标没有更新时,您可以使用以下“运行”命令快速清除图标叠加缓存:

taskkill /f /im tgitcache.exe

缓存进程应该自动重新启动。如果您发现缓存经常出现问题,甚至可以将其转换为桌面快捷方式。

4

这是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%

2
我们解决这个问题的方法是将Git仓库移动到映射的网络驱动器上,从而更改驱动器号。看起来TortoiseGit需要设置监视网络驱动器 - 这不是默认行为。
因此,要解决此问题,您需要:
- 右键单击存储库文件夹 - 选择“TortoiseGit” - 选择“设置” - 选择“图标叠加” - 勾选“网络驱动器”
完成了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接