TortoiseGit modified sign (icon overlay) is not updating
I have made a small change in some code but TortoiseGit shows it as modified (red exclamation sign) although I have committed, pulled, pushed, but it stays. What should I do here? I have not seen this issue before.
I'm assuming you are using tortoise git? I've had the issue before, sometimes pressing F5 fixes it other times it just goes away after tortoise resyncs itself.
Kill TGitCache.exe works for me. .... I put this as an answer because I don't have enough reputation points to add it as a comment. But wanted to help further iterate that it is a working solution.
Killing TGitCache did work for a couple of seconds but the red icon appeared again.
It turned out the file was renamed (first letter was changed from uppercase to lower case) locally but was not changed in Git. Windows is case insensitive but Git is! So the icon overlay did not match anymore. I did find this out by removing the specific file and selecting "revert" from the Turtoise Git context menu. In the list, two files did show up, one with first letter uppercase, the other complete lowercase.
Finally renaming the file from the Git context menu did resolve the issue for me.
None of the other options here could make the problem go away. (I wasn't able to identify any file that had a change in casing)
I was pretty confident that everything was checked in as it should be so I just deleted my repo and checked it out again. Poof, works again.
If you're not as confident (or you just don't want to risk it, as is best), rename your repo folder lcoally and check out your repo again, then you can pull a diff to see if anything odd is missing/changed between the two repo folders.
This might help...
My drive letter was B: and the overlay icons would not update. I changed it to beyond C:, (I used M:) and it started working. Looks like TGIT does not drives below C:
It's a known issue in TortoiseGit. It exists for years and will apparently never be fixed. I don't know whether it's because the TortoiseGit developer is unwilling or unable to do it. (I've also reported it before but can't find the issue anymore now.)
Anyway, here's what I do to resolve it:
git gc --prune=all --quiet
It prunes the Git repository, repacking all those single object files, reducing the number of files in .git from up to tens of thousands to under 20, and probably improving the overall performance of Git operations.
Sometimes Git does a light version of that on its own after a commit, but I've rarely ever seen this happen in years of daily use. So I just do it myself. This is also a great action to consider before making a backup of the system (see below).
To make it easier, I've created a batch file git-gcall.cmd in an accessible path that calls the command shown above. I have to run it after virtually every single commit and after 2–3 seconds the icons update themselves. No killing involved. Just waking up TortoiseGit a bit harder to actually observe the repository and update its status.
Here's a PowerShell script that runs this command in a set of configured directories recursively, if necessary, for use before making a backup. It can also be run on a regular basis, for example over night, to resolve this outdated icons issue in the background.
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
Call it with the usual required accompanying batch file:
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%
After getting astonished by this and trying pretty much everything, I managed to get it fixed by simply deleting one single file from the directory marked as modified, then reverting it from the TortoiseGit menu itself.
P.S. I made sure the CRC64 checksum for the entire directory was identical before and after this operation.
In my case, TortoiseGIT behaved correctly, but WindowsExplorer tricked me.
There was a non-checked-in file in my folder, ~$Data.xls, thus TortoiseGIT correctly displayed the red icon on the containing folder:
However, in the first place, I could not see this file and thus assumed that the green icon should be displayed.
The file was hidden by WinExplorer because in its options "Hide protected operating system files (Recommended)" was ticked.
I thus recommend to untick this option to avoid confusion:
I encountered a case where some files appear to not be part of the repository (no overlay icon on those files) when they should have had the green checkmark overlay. The thing that worked for me was deleting the files, then using Git Revert to get the files back. Afterwards, the files had the green checkmark.
Killing TGitCache.exe didn't work for this, nor did changing the caching settings.