TortoiseGit 和 TortoiseSVN 都安装时,右键菜单会很长,尝试将 TortoiseGit 的 Clone 菜单折叠到二级菜单中
默认效果:
太占空间,希望能把两个菜单折叠到一个里。
查找资料
-
google,百度 查找右键菜单。
-
查找折叠菜单,二级菜单,均没有实现。
解决办法
- 上面百度到右键菜单在注册表相关,桌面右键为例:
普通右键菜单:
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\Background\shell
可以看到下面有 “在此处运行 CMD”
COM组件右键菜单:
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\Background\shellex
可以看到下面有 TortoiseGit 和 TortoiseSVN 和其他的(新建,分享,小工具)。
- 实验解决办法 一(未成功)
在 shell 下创建子菜单,将 COM 组件的菜单移到里面。失败。。。。
- 实验解决办法 二 (成功)
突然想到 这个是开源项目啊,还有一个修改代码实现的方法,查看 TortoiseGit 右键菜单的 CLSID :
{10A0FDD2-B0C0-4CD4-A7AE-E594CE3B91C8}
可以看到注册的 dll 文件:
TortoiseGitStub.dll
TortoiseGit 源码编译
- TortoiseGit 的源码在 gitlab, clone 下来
git clone https://gitlab.com/tortoisegit/tortoisegit.git
克隆的有点慢,可以设置下代理 😉:
git config --global http.proxy "10.0.1.1:1080"
git config --global https.proxy "10.0.1.1:1080"
- 我现在用的是官网最新稳定版 2.5
看下tag,切换到 2.5
git checkout REL_2.5.0.0_EXTERNAL
查看 build.txt,依次 加载子模块,补丁。
git submodule update --init
cd ext/libgit2
for %%G in (..\libgit2-*.patch) do ( type %%G | git am --3way )
编译工程 TortoiseShell 完成得到 TortoiseGit.dll,后面浏览代码发现菜单添加在这里面。
修改代码
- 工程 TortoiseShell 中 ContextMenu.cpp:1047
bIsTop = ((topmenu & menuInfo[menuIndex].menuID) != 0);
//bIsTop = false;
// insert the menu entry
InsertGitMenu( bIsTop,
bIsTop ? hMenu : subMenu,
bIsTop ? indexMenu++ : indexSubMenu++,
idCmd++,
menuInfo[menuIndex].menuTextID,
bShowIcons ? menuInfo[menuIndex].iconID : 0,
idCmdFirst,
menuInfo[menuIndex].command,
uFlags);
简单的修改了 bIsTop,导致问是 最前面不会添加 "Git ",影响不大。
- 编译出 TortoiseGit.dll
替换和删除会不允许,但是可以重命名。放入新的之后重启资源管理器
taskkill /f /im explorer.exe && start explorer
最后效果:
下载地址
TortoiseSVN 的后面有时间再看看。。。