执行hg git pull触发打开文件过多错误的问题求助
解决Mac上Mercurial+hg-git迁移后
hg pull报“打开文件过多”的问题 我之前在跨平台迁移Mercurial跟踪Git的仓库时,也碰到过类似的文件句柄耗尽问题,结合自己的排查经验和社区方案,给你几个可行的解决方向:
临时调高Mac的文件描述符限制
Mac默认的单进程文件句柄上限比Windows低很多,而hg-git依赖的dulwich在同步Git仓库时可能会批量打开大量文件。你可以先在终端里临时调高限制:ulimit -n 4096执行完后再尝试
hg pull。如果临时有效,想要永久修改的话,根据你使用的shell编辑对应的配置文件:- Bash用户:编辑
~/.bash_profile,添加ulimit -n 4096 - Zsh用户:编辑
~/.zshrc,添加ulimit -n 4096
保存后重启终端即可生效。
- Bash用户:编辑
清理dulwich的缓存文件
跨平台迁移后,dulwich的缓存可能残留了Windows环境下的无效数据,导致处理时异常打开大量文件。你可以:- 删除仓库本地的缓存:进入仓库的
.hg/cache目录,删除所有以dulwich开头的文件夹 - 删除全局Mercurial缓存:找到
~/.hgcache目录,同样清理其中的dulwich相关缓存
清理完成后重新执行hg pull。
- 删除仓库本地的缓存:进入仓库的
重置hg-git的仓库关联
迁移过程中可能导致hg-git的映射配置出现异常,你可以尝试重置关联:hg git unmap hg git map重新建立映射后再尝试拉取操作。
禁用Git子模块处理(如果有子模块)
如果目标Git仓库包含子模块,Mercurial在同步时可能会递归打开子模块的所有文件,触发句柄上限。你可以临时在仓库的.hgrc里添加配置:[git] submodules = false保存后再执行
hg pull,确认是否解决问题。尝试回退Mercurial版本
虽然你当前用的是最新版,但新版本的Mercurial/dulwich可能和Mac系统存在兼容性问题,而你Windows端用的是4.4.2。可以尝试在Mac上安装Mercurial 4.x系列的稳定版本(比如4.8.x),看看是否能复现Windows上的正常状态。
内容的提问来源于stack exchange,提问作者EvgeniySharapov
相关产品推荐
相关产品推荐

