Github提交时出现「尝试创建子目录位置存在同名文件」错误如何解决?
"Sorry, a file exists where you’re trying to create a subdirectory. Choose a new path and try again"
该报错是GitHub/Git提交场景下的高频问题,大量开发者都遇到过同类情况,常见于多人协作、跨操作系统开发、仓库历史迁移的场景。
错误产生原因
- 路径类型冲突:你准备提交的子目录路径,和本地/远端仓库中已存在的普通文件 完全同名。比如你要创建
src/tools/目录,但仓库中src路径下已经有一个名为tools的普通文件,Git无法在同一路径下同时兼容文件和目录两种类型,因此抛出错误。 - 大小写识别冲突:Windows、macOS这类操作系统默认不区分文件名大小写,如果你新创建的目录和远端已有的文件仅大小写不同(比如新目录叫
Utils,远端已有文件叫utils),Git识别到路径冲突也会触发该报错。 - 索引缓存残留:你之前删除过对应路径的文件,但没有清理Git的本地索引缓存,缓存中仍然记录该路径为文件类型,和你现在要提交的目录类型冲突。
解决步骤
- 定位冲突根源:运行命令
git ls-tree HEAD <报错的路径前缀>,比如报错指向src/utils就执行git ls-tree HEAD src/utils,如果返回结果中类型字段为blob,就说明该路径当前被Git识别为普通文件,确实存在类型冲突。 - 按场景处理冲突:
- 同名文件无保留价值:直接删除本地的同名文件,再执行
git rm <同名文件路径>,之后重新添加目录提交即可。 - 仅为缓存残留冲突:执行
git rm --cached <冲突路径>清理索引缓存,再重新添加目录提交即可。 - 大小写命名冲突:先统一目录和已有文件的命名大小写规范,比如约定全小写命名,清理缓存后再提交。
- 同名文件无保留价值:直接删除本地的同名文件,再执行
- 拉取远端代码时触发的报错:先执行
git stash暂存本地未提交的修改,拉取远端最新代码后再执行git stash pop恢复本地修改,手动处理路径冲突后重新提交即可。
内容的提问来源于stack exchange,提问作者Alen Abraham
相关产品推荐
相关产品推荐

