You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

切换至历史Commit ID时出现unable to rmdir警告的技术求助

Git checkout时出现"unable to rmdir (directory): Directory not empty"警告的原因与解决办法

原因

  • 警告和仓库中的子模块直接相关:你本地的子模块目录里存在未被Git追踪的文件(比如临时文件、编译生成的产物,或是子模块本地未提交的修改),当切换Commit时,Git尝试清理这些子模块目录,但因为目录非空无法完成删除操作,从而抛出警告。
  • 另一种可能是,目标Commit对应的子模块版本和你本地当前的子模块状态不匹配,Git在更新子模块目录的过程中,无法完全清空旧的子模块目录内容。

解决方法

1. 清理子模块中的未追踪文件

进入每个触发警告的子模块目录,执行以下命令删除所有未被Git追踪的文件和空目录:

git clean -fd

注意:这个操作会永久删除未追踪文件,若有需要保留的文件,请先备份。

2. 切换Commit时同步子模块

可以在checkout时直接指定子模块递归更新,一次性完成主仓库和子模块的版本切换:

git checkout 20e8984854d21dcd78d7bc424d4d12f2c40ba943d --recurse-submodules

如果已经执行过checkout,再执行以下命令同步并更新子模块:

git submodule sync
git submodule update --init --recursive

3. 手动清理问题目录(备选方案)

如果上述方法无效,找到警告中提到的具体目录,手动清理其中的未追踪文件,或者直接删除目录后重新初始化子模块:

# 替换为实际的子模块目录名
rm -rf path/to/submodule-dir
git submodule update --init path/to/submodule-dir

内容的提问来源于stack exchange,提问作者tadm123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 19:05:20