Windows 10でTortoiseGitの アイコンオーバーレイ が表示されなくなりました。この問題について調べてみると、Windowsはアイコンオーバーレイが15個を超えると表示されなくなってしまうそうです。そこで、アイコンオーバーレイが表示されない場合にできる幾つかの対策を備忘録として紹介します。
はじめに
事の発端は、Windows 10をクリーンインストールしてからTortoiseGitもインストールすると、今まで表示されていたアイコンオーバーレイが表示されなかったことでした。
このことに気付いた当初は、表示されなくても問題ないだろうということであまりに気にしていませんでした。
しかし、当施設で行っている計測サービスに必要な解析システムの開発を再開したことで不便を感じるようになりました。
特に、開発システムのバージョン管理にGitを利用して複数のPC間で開発したファイルを共有していると、このアイコンオーバーレイがあるかないかで随分変わります。
具体的には、更新したファイルをGitでリモートリポジトリからローカルリポジトリにPullする場合、そのローカルリポジトリに変更されたフィルがあると、以下のようなエラーが出力されます。
error: Your local changes to the following files would be overwritten by merge:
****/***.***
Please commit your changes or stash them before you merge.
Aborting
あるPC(A)でファイルを更新し、別のPC(B)で更新ファイルを同期しようとしたとき、そのPC(B)にも更新ファイルがあると上記のようなエラーが表示されてPullできない場合があります。
アイコンオーバーレイがあった時は、アイコンの違いでどのファイルか区別できるのですが、これがないとエラーメッセージや更新日時を確認する必要が出てきます。
TortoiseGitのオーバーレイが表示されない件について調べてみると、以下のサイトを見つけました。
このサイトでも紹介されているように、TortoiseGitの「設定」→「アイコンオーバーレイ」にある「オーバーレイハンドラー」を見てみると、赤枠で囲んだ部分にエラーが表示されていました。
次に、TortoiseGitに限らず、オーバーレイの表示について調べてみると、この問題がWindowsにあることが分かりました。
実は、Windowsに登録できるアイコンオーバーレイの最大数は15個と決まっています。
そして、TortoiseGitに表示されたメッセージでは、「TortoiseGit以外で28個のオーバーレイハンドラーがインストールされている」となっています。
「レジストリエディターを起動する」をクリックして、レジストリエディターで確認してみると、TortoiseGitのアイコンオーバーレイまで含めて37個もあることが分かりました。
最大数の15個を大幅に超えているんですから、表示されないはずですよね…。
このため、不必要なアイコンオーバーレイを削除して、アイコンオーバーレイの数を15個に抑える必要があります。
今回の対策を行ったPCは32bit版と64bit版のWindows 10です。
それぞれ対策方法に若干の違いがあるため、注意してください。
アイコンオーバーレイ の表示対策
アイコンオーバーレイが表示されない原因がWindowsで15個に制限されていることが分かりました。
そして、他のPCのレジストリも確認してみると、Windowsに関連があるアイコンオーバーレイは以下の2つでした。
- EnhancedStorageShell
- Offline Files
私の場合、上記2つ以外のアイコンオーバーレイの全てがDropBoxやOneDriveなどのオンラインストレージのアプリケーションでした。
Windowsに2個が取られるため、登録可能なアイコンオーバーレイは13個までということが考えられます。
なので、必要なアプリケーションのアイコンオーバーレイを表示したい場合、登録するアイコンオーバーレイをさらに13個に抑えなければならないということが言えます。
制限数を超えたアイコンオーバーレイを表示する方法について調べたところ、いくつかの対策が分かったので、それぞれを試してみることにしました。
アプリケーションの削除
アイコンオーバーレイの登録数を制限する方法として、手っ取り早いのは、アイコンオーバーレイを使用しているアプリケーションが不要な場合は、そのアプリケーションをアンインストールしてしまうことです。
ただ、アプリケーションをアンインストールしてもレジストリに登録されたアイコンオーバーレイの設定まで削除されているとは限りません。
私の場合、既にサービスが終了したオンラインストレージのCopyのアイコンオーバーレイがアンインストール後もレジストリに残っていました。
この場合は自分で削除するしかありません。
レジストリから削除
Copyのオーバーレイに関しては、既にアンインストールしたアプリケーションなので、躊躇なく削除できます。
もし削除するのが不安であれば、レジストリエディターには「ファイル」のメニューにある「エクスポート」でレジストリのバックアップが取れます。
なので、レジストリを起動してからキーを削除する前にレジストリのバックアップを取っておくことをお奨めします。
それでは、まず、レジストリエディターを起動します。
レジストリの起動方法が分からない場合は、こちらをご覧ください。
レジストリに登録されているアイコンオーバーレイのパスは以下の通りです。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers
TortoiseGitではオーバーレイハンドラーの項目からレジストリエディターを起動した場合、このパスまで直で表示します。
該当のレジストリキーを削除する場合、マウスでそのキーを選択してDelキーを押すか、右クリックで表示されるメニューで「削除」を選択します。
Copyには全部で8つのキーがあるので、これら全てを削除します。
しかし、37個のうち、8個のアイコンオーバーレイのレジストリキーを削除しても、まだ29個も残っています。
今回はCopyを例に挙げましたが、人によってはSkyDriveやSkyDriveProが対象となる場合もあります。
SkyDriveProの3個のレジストリキーも削除して、残り26個になりました。
次に、残りのアイコンオーバーレイでどれを削除するか悩んでいると、以下のサイトを見つけました。
- アイコンオーバーレイの上限を超えないようにDropboxとOneDriveを共存させる方法を紹介
- Which Dropbox icon is for which Icon Overlay Identifier name?
上記のサイトでは、DropBoxのアイコンオーバーレイで不要と思われるキーのみを削除してレジストリに登録されているレジストリキーを15個以内に制限しています。
DropBoxの各レジストリキーの意味は以下の通りです。
- Synced! – (green)
- Sync in progress (blue)
- Locked: Synced! (green + lock)
- Locked: Sync in progress (blue + lock)
- Sync not happening (red X)
- Locked: Sync not happening (red X + Lock)
- A file or folder isn’t syncing (gray minus)
- Locked: A file or folder isn’t syncing (gray minus + Lock)
この8個のうち、”Locked”の3・4・6・8は不要だと思うので、これらの4個のキーを削除すれば良いようです。
これで、DropBoxのアイコンオーバーレイのレジストリキーは、10個のうち4個が削除されて6個になりました。
そして、SkyDriveProのアイコンオーバーレイのレジストリキー3つも削除しました。
このため、レジストリに登録されていた26個のアイコンオーバーレイのレジストリキーが20個になりました。
レジストリによる優先順位の設定
色々と調べてみると、実はレジストリに登録されているアイコンオーバーレイのレジストリキーを削除する以外に、アイコンオーバーレイの優先順位を設定することでも表示対策が出来ることが分かりました。
方法としては、レジストリエディターでアイコンオーバーレイのキー名を変更します。
どのように変更するかは、以下のサイトを参考にしました。
1のサイトでは、キー名を「””」(ダブルクォーテーション)で囲むことでアイコンオーバーレイの優先順位を変更しています。
また、2のサイトはDropBoxのヘルプで紹介されているのですが、キー名の先頭に「z」を追加することでアイコンオーバーレイの優先順位を変更しています。
上記2つの方法で順番に違いが出るかを確認してみたところ、以下のようになりました。
キー名を「”」(ダブルクォーテーション、赤枠)で囲むよりも、キー名の先頭に「z」(青枠)を付けた方がより下位に配置されることが分かります。
上位13個のアイコンオーバーレイが表示されるので、キー名の先頭に「z」を付ける方が「”」で囲むより簡単で、かつ最下位に設定できるので並べ替えやすいのではないかと思います。
ちなみに、「”」で囲まないで、キー名の先頭にのみ「”」をつけた場合どうなるかを試したところ、「”」で囲んだ時と配置は変わりませんでした。
やり方は、該当のキー名を右クリックし、表示されるメニューの「名前の変更」を選択します。
DropBox・OneDrive・TortoiseGitのキー名の先頭にはどういう訳か半角スペースが2~3個入っています。
ですが、後で元に戻したい場合があるので、DropBoxでは半角スペース3個の前にzを入力します。
キー名の先頭にある半角スペースも優先順位を決めるためのもので、半角スペースが多いほど、優先順位が高くなるそうです。
逆に、優先順位を下げたい場合、前述したDropBoxの各キーの意味を基に不要なキーに「z」を追加してください。
” DropboxExt09″ → “z DropboxExt09”
よく分からなくて削除したくない場合は、とりあえずキー名に「z」を付けて最下位に配置しましょう。
さらに、表示したいアイコンオーバーレイのキー名に01~13までの数字をキー名の先頭につけることでも優先順位を指定することができるようです。
DropBoxのDropboxExt09とDropboxExt10は役割が分からないので、「z」を付けて最下位に配置しました。
追記
いつの間にか、再びTortoiseGitのアイコンオーバーレイが表示されなくなりました。
この理由として、Dropboxを更新したことが原因です。
早速、レジストリで優先順位を確認してみると、Dropboxのキー名につけたzが更新によって消えていました。
更新の度にキー名を操作するのは面倒なので、半角スペースの数で優先順位を決めることにしました。
具体的には、TortoiseGitのキー名の先頭に空白を4つ以上追加します。
ただ、この場合、TortoiseGitを更新すると元に戻る可能性があるかもしれませんね。
OneDriveの完全アンインストール
ついでに、OneDriveのキーの意味は以下のサイトで紹介されていました。
OneDriveの各キーの意味は以下の通りです。
- Not syncing (red x)
- Synced – Shared
- Syncing – Shared
- Synced
- Syncing
OneDriveの場合、Windows 10の64bitではキー名の削除も変更も可能でしたが、32bit版ではキー名の削除や変更を実行しようとしてもできませんでした。
このため、アイコンオーバーレイの登録数に余裕がなければ、OneDriveをアンインストールする必要が出てきます。
OneDriveは、通常のコントロールパネルからのアンインストールができません。
なので、OneDriveのアンインストール方法を調べて、以下のサイトを見つけました。
OneDriveのアンインストールは、コマンドプロンプト(管理者権限)から実行する必要があります。
コマンドプロンプトを管理者権限で起動する方法は、こちらをご覧ください。
1.OneDriveの終了
OneDriveが起動しているとアンインストールが出来ないので、コマンドプロンプトでOneDriveを強制終了させる必要があります。
このため、OneDriveを強制終了させる場合、コマンドプロンプトで以下のコマンドを入力します。
taskkill /f /im OneDrive.exe
実際にコマンドプロンプトでコマンド入力した例を以下に載せておきます。
強制終了が成功するとそのメッセージが表示されます。
2. OneDriveのアンインストール
OneDriveを終了したら、次にアンインストールをコマンドプロンプトで行います。
Windows 10の32bit版と64bit版とでコマンドが異なるので注意が必要です。
アンインストールを行うためのコマンドは以下の通りです。
32bitの場合 %SystemRoot%\System32\OneDriveSetup.exe /uninstall 64bitの場合 %SystemRoot%\SysWOW64\OneDriveSetup.exe /uninstall
実際に32bitのWindows 10のコマンドプロンプトでコマンド入力した例を以下に載せておきます。
アンインストールの場合、ちゃんと削除されてもメッセージが何も表示されません。
2017年1月以降、アンインストールが厄介だったOneDriveが簡単にアンインストール出来るようになりました。
スタートメニューにあるOneDriveのアイコンを右クリックして表示されるメニューの「アンインストール」をクリックすると、「プログラムと機能」ウィンドウが表示され、今まで通りのやり方でアンインストールを実行できます。
ただ、以下に説明する「フォルダの削除」の削除は行われないので、以下の操作を手動で行う必要があります。
アイコンオーバーレイのレジストリキーは再起動後に消されますが、もし消されていない場合は手動で削除してください。
それ以外のレジストリキーの削除は、下記の「レジストリキーの削除」を参考にしてください。
フォルダの削除
OneDriveのアンインストールを実行しても、OneDriveに関係するフォルダが削除されるわけではありません。
なので、OneDriveに関係するフォルダを削除する必要があります。
このフォルダを削除する作業もコマンドプロンプトで行います。
フォルダを削除するコマンドは以下の通りです。
rd "%UserProfile%\OneDrive" /Q /S rd "%LocalAppData%\Microsoft\OneDrive" /Q /S rd "%ProgramData%\Microsoft OneDrive" /Q /S rd "C:\OneDriveTemp" /Q /S
最初のコマンドはOneDriveでオンラインストレージと同期するフォルダを削除するコマンドです。
今までにオンラインストレージと同期させていたファイルやフォルダはこの中にあるので、必要なものがある場合は予め中身を移すかバックアップを取っておいてください。
削除されるフォルダのパスは、”C\Users\ユーザー名\OneDrive”です。
実際に、コマンドプロンプトでコマンドを入力した様子を以下に載せておきます。
2番目のコマンドはOneDriveの実行ファイルなどがあるフォルダです。
削除されるフォルダのパスは、”C\Users\ユーザー名\AppData\Local\Microsoft\OneDrive”です。
アンインストールでほとんどのファイルが削除されていますが、一部のファイルが残っています。
アンインストール直後にこのコマンドを実行した場合、一部のファイルがまだWindowsに使われていて削除できません。
なので、このコマンドを実行する前に、Windowsの再起動を行っておく必要があります。
3番目のコマンドで削除されるフォルダは用途不明です。
削除されるフォルダのパスは、”C\ProgramData\Microsoft OneDrive”です。
4番目のコマンドは、恐らくOneDriveに関係する添付ファイルが格納されるフォルダです。
削除されるフォルダのパスは、”C\OneDriveTemp”です。
以上で、OneDriveに関係する全てのフォルダが削除されます。
レジストリキーの削除
OneDriveをアンインストールして、それに関わるフォルダを削除してもレジストリにはまだOneDriveのレジストリキーが残っています。
このレジストリキーを削除するコマンドは32bit版と64bit版で異なるので注意が必要です。
以下にそれぞれのコマンドを記載しておきます。
32bitの場合 REG Delete "HKEY_CLASSES_ROOT\CLSID\{018D5C66-4533-4307-9B53-224DE2ED1FE6}" /f 64bitの場合 REG Delete "HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{018D5C66-4533-4307-9B53-224DE2ED1FE6}" /f
アイコンオーバーレイのレジストリキーも削除できるので、OneDriveの5個のレジストリキーを削除します。
これで、レジストリに登録されていた20個のアイコンオーバーレイのレジストリキーが15個になりました。
この時点でTortoiseGitのアイコンオーバーレイのレジストリキーが上位15以内に入るため、Windowsを再起動するとTortoiseGitのアイコンオーバーレイが表示されるようになります。
ショートカットのアイコンオーバーレイが消える(番外)
今回、TortoiseGitのアイコンオーバーレイが表示されなかった原因は、レジストリでの登録数が上限を超えていたからでした。
しかし、それ以外にも表示されなくなる原因として「IconCache.db」の破損が挙げられます。
「IconCache.db」が破損すると、ショートカットの矢印も表示されなくなってしまいました。
この問題を解決する方法として、以下のサイトを参考にしました。
このサイトでは3つの方法を紹介していますが、この記事では問題解決に至った一つの方法を紹介します。
やり方は簡単で、「IconCache.db」の破損が原因である場合、この「IconCache.db」を完全削除(shift+del)するだけです。
「IconCache.db」があるフォルダのパスは、”C:\Users\ユーザー名\AppData\Local”です。
「IconCache.db」は、削除した後に再起動すると、自動的に再作成されます。
最後に
Windows 10にTortoiseGitをインストールしたところ、今まで表示されていたアイコンオーバーレイが表示されなくなりました。
この問題を調べたところ、Windowsに登録できるアイコンオーバーレイは最大15個で、Windowsが使用するアイコンオーバーレイを除くと13個しか使えないということが分かりました。
使用していないアプリケーションのアイコンオーバーレイは、レジストリエディターで手動で削除することが出来ました。
また、削除して良いかどうか分からないアイコンオーバーレイに関しては、キー名の先頭に「z」を追加して優先順位を下げることでアイコンオーバーレイを非表示にすることが出来ました。
64bit版のWindows 10では、OneDriveのアイコンオーバーレイの優先順位を下げることが出来ました。
しかし、32bit版のWindows 10では、OneDriveのアイコンオーバーレイを削除することも優先順位を下げることも出来ませんでした。
このため、32bit版ではOneDriveをアンインストールすることにしました。
この結果、OneDriveのアイコンオーバーレイを削除することができ、TortoiseGitのアイコンオーバーレイを表示することが出来るようになりました。
ちなみに、「レジストリからの削除」で紹介した参考サイト1では、恐らくWindowsの64bit版では別のパス
(HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers)
にも同一のものがあってそれも削除すると書かれていました。
しかし、私の場合、64bit版のWindows 10を使用していますが、ここをいじらなくてもTortoiseGitのアイコンオーバーレイがちゃんと表示されました。
この部分をいじる必要があるかどうかの根拠は不明なので、興味のある人がいたら試してみてください。
これまでの操作を行ってきて、レジストリキーの削除が不安な場合、以下のような手順が考えられます。
- アイコンオーバーレイを使用する不要なアプリケーションの削除
- 先頭文字に「z」を追加することによるレジストリキーの優先順位の操作
- アイコンオーバーレイを使用する必要なアプリケーションで不要なレジストリキーの削除
- OneDriveの削除
他のサイトを調べていて、アイコンオーバーレイの表示対策としてレジストリキーの削除を紹介しているサイトが多く、私もこれらのサイトを参考にしてレジストリキーの削除を行っていました。
ただ、使用しているアプリケーションのアイコンオーバーレイの用途不明なレジストリキーを削除することには不安があり、削除以外の方法も調べてみました。
その結果、レジストリキーのキー名に文字を追加することによる優先順位の操作に辿り着きました。
この方法は一文字追加・削除することでアイコンオーバーレイの表示・非表示を簡単に操作することができます。
また、レジストリの設定もすぐに戻せるので、32bit版のOneDriveのようにキー名の操作ができない場合を除いて、レジストリキーを削除する前に優先的にやるべき対策ではないかと思いました。
OneDriveの削除は、アンインストールの実行ファイルがなかったため、ある時期まではアンインストールの実行をコマンドプロンプトで行わなければならず、初心者には敷居が高くて難しかったようです。
しかし、現在では「コントロールパネル」→「プログラムのアンインストール」から他のアプリケーションのアンインストールと同じように実行できるようになりました。
ただし、フォルダやレジストリキーの削除は行われないので注意が必要です。
また、アンインストールした後で、再インストールが必要になった場合、32bit版では”C:\Windows\System32″、64bit版では”C:\Windows\SysWOW64″にそれぞれOneDriveSetup.exeがあるので、これを実行すればOneDriveをインストールすることが出来ます。
コメント