PyCharm提交时项目与子模块结构混乱及分支显示问题求助
背景
本地原有项目结构:
20240720 # 项目根目录 ├── tests ├── vnpy # 子模块 ├── vnpy_clickhouse # 子模块 ├── vnpy_datafeed # 子模块 └── vnpy_factor # 子模块
同一电脑上克隆的项目结构:
crypto_vnpy # 项目根目录 ├── tests ├── vnpy # 子模块 ├── vnpy_clickhouse # 子模块 ├── vnpy_datafeed # 子模块 └── vnpy_factor # 子模块
克隆后出现以下问题:
- 提交页面中项目与子模块结构显示混乱
- 新克隆项目显示类URL形式的分支,无法查看完整URL识别对应文件/分支,且切换此类分支时,原项目
20240720的分支会同步变更
问题解答
1. 解决提交页面结构混乱的勾选策略
提交时需明确区分主项目与子模块的变更范围:
- 仅勾选主项目根目录下的自有文件(如
tests目录内的文件、.gitmodules配置文件(若有修改)),不要勾选子模块对应的文件夹(如vnpy、vnpy_clickhouse等)。 - 子模块的变更需单独进入对应子模块目录,在子模块自身的仓库中提交,不要在主项目的提交页面中处理子模块的内容变更。
2. 类URL形式分支的相关说明
- 本质:这类分支是子模块的远程跟踪分支引用(格式通常为
remotes/origin/<分支名>),属于Git对子模块仓库的跨项目共享引用。由于两个项目共用了本地的子模块仓库副本,因此切换这类分支时,另一个项目的子模块分支会同步变更。 - 与正常分支的区分:正常本地分支无路径前缀(如
main、dev),直接显示分支名称;类URL形式的分支带有remotes/或类似路径前缀,格式更接近Git内部引用路径。 - 删除方法:
- 清理子模块无用本地分支:进入对应子模块目录(如
cd crypto_vnpy/vnpy),执行git branch -d <类URL分支名>(若分支未合并,用-D强制删除)。 - 清理过时远程跟踪分支:在子模块目录内执行
git remote prune origin,自动移除已在远程仓库删除的分支引用。 - 若要彻底隔离两个项目的子模块,可在新克隆项目中执行以下命令,让新项目拥有独立的子模块本地副本:
git submodule deinit -f . git submodule update --init --recursive
- 清理子模块无用本地分支:进入对应子模块目录(如
内容的提问来源于stack exchange,提问作者EvanHong
相关产品推荐
相关产品推荐

