命令行执行hg merge合并首个文件后卡顿,如何解决?
解决Hg合并后p4merge卡住的问题
我之前也碰到过这个糟心的情况!明明在p4merge里搞定了冲突、保存关闭,Hg命令行却一直卡着不动,只能终止合并重来——太耽误事了。这大概率是Hg没正确检测到p4merge的退出状态,或者你的merge工具配置有小问题,给你几个实测有效的解决办法:
1. 检查并修正Hg的merge工具配置
首先确保你的~/.hgrc(或Mercurial全局配置文件)里的p4merge配置是正确的,尤其是针对macOS的路径和参数:
打开配置文件,找到[merge-tools]和[ui]部分,改成这样:
[ui] merge = p4mergeosx [merge-tools] p4mergeosx.executable = /Applications/p4merge.app/Contents/MacOS/p4merge p4mergeosx.args = $base $local $other $output p4mergeosx.binary = True p4mergeosx.gui = True p4mergeosx.priority = 1
关键点说明:
- 一定要调用
/Applications/p4merge.app/Contents/MacOS/p4merge这个可执行文件,而不是直接写/Applications/p4merge.app——直接打开.app会让p4merge在后台运行,Hg抓不到它的退出信号。 binary = True和gui = True是告诉Hg:这是一个GUI工具,你得等着它完全退出再继续。
2. 强制等待p4merge进程结束(临时应急)
如果改完配置还是偶尔卡住,可能是p4merge窗口关闭后后台进程没彻底退出。这时候打开活动监视器,搜索p4merge,找到对应的进程杀掉,Hg命令行就会立刻继续执行。不过这只是临时解决,还是得把配置改对才能根治。
3. 用Shell脚本包装p4merge(进阶方案)
如果上面的方法都不管用,可以写个简单的Shell脚本帮Hg捕捉p4merge的退出状态:
- 创建一个名为
p4merge-wrapper.sh的文件,内容如下:
#!/bin/bash # 调用真正的p4merge可执行文件 /Applications/p4merge.app/Contents/MacOS/p4merge "$@" # 等待p4merge进程结束,获取退出码 wait $! exit $?
- 给脚本加执行权限:
chmod +x /path/to/p4merge-wrapper.sh
- 把Hg配置里的
executable改成这个脚本的路径:
p4mergeosx.executable = /path/to/p4merge-wrapper.sh
这个脚本会确保Hg能拿到p4merge的正确退出信号,彻底解决卡住的问题。
内容的提问来源于stack exchange,提问作者TheJeff
相关产品推荐
相关产品推荐

