如何通过TortoiseHg单次提交仅修改大小写的含文件目录重命名?
解决Mercurial中仅修改目录大小写的单次提交问题
我明白你遇到的头疼问题——Windows文件系统默认不区分大小写,直接改目录大小写时,TortoiseHg会误判成创建子目录,逼得你要分两次提交才能完成。这里有个能单次提交搞定的方法,核心是利用Mercurial的重命名追踪功能绕开系统限制:
具体操作步骤:
- 打开TortoiseHg命令行:右键点击仓库根目录,选择「TortoiseHg」→「Command Prompt」,调出命令提示符窗口。
- 让Mercurial标记重命名关系:在命令行里执行这条命令,先让版本控制系统记住重命名操作:
这一步后,Mercurial会在内部记录「Validator」要改成「validator」,但因为Windows的大小写不敏感特性,实际目录名暂时不会变化。hg rename Validator validator - 手动调整系统中的目录名:还是在命令行里,通过临时名称过渡来修改大小写(Windows不允许直接改目录大小写):
ren Validator tempDir ren tempDir validator - 刷新TortoiseHg工作区:回到TortoiseHg的工作区界面,点击刷新按钮,你会看到Mercurial已经正确识别这是一次目录重命名,而不是新增子目录。
- 提交变更:确认变更记录无误后,直接提交这次修改,就能完成仅修改目录大小写的单次提交了。
为什么这个方法可行?
之前的两次提交方案之所以麻烦,是因为直接在文件系统改名字时,Windows认为「Validator」和「validator」是同一个目录,Mercurial无法识别这是重命名,反而会误判成新建子目录。而先通过hg rename让Mercurial明确追踪重命名关系,再调整实际目录名,就能让版本控制系统正确识别这是一次单一的重命名操作,自然就能单次提交完成。
内容的提问来源于stack exchange,提问作者Abs
相关产品推荐
相关产品推荐

