TortoiseGit modified sign (icon overlay) is not up

2020-05-12 06:05发布

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.

14条回答
一夜七次
2楼-- · 2020-05-12 06:45

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%
查看更多
Summer. ? 凉城
3楼-- · 2020-05-12 06:45

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.

查看更多
Emotional °昔
4楼-- · 2020-05-12 06:50

Please check your path to see if it matches in case.

Some/Dir/SomeFile.ext

is the same to windows as

some/DIR/someFILE.EXT

But to Git they are in different locations. This is remedied by navigating back from the top with the proper casing.

查看更多
太酷不给撩
5楼-- · 2020-05-12 06:55

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.

Here is another possible fix link.

The current workaround is to kill TGitCache.exe with the Windows task manager.

查看更多
乱世女痞
6楼-- · 2020-05-12 06:57

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.

查看更多
对你真心纯属浪费
7楼-- · 2020-05-12 06:58

There is a workaround that I have tried:

Rename the directory of the repository and then change it back and you are good to go!

As an example: MyComplexProject can be changed to MyComplexProject1 then back to MyComplexProject.

查看更多
登录 后发表回答