如何在 PyCharm 中使用 Git Submodule
现状¶
截至 2023 年 3 月,JetBrains 全家桶仅对 Git Submodule 功能提供很有限的支持。在 PyCharm 中甚至根本看不到 Git Submodule 的身影。
本文通过 git 命令行和 PyCharm 新建 Git 仓库的方法,来曲线救国地解决这个问题。
步骤¶
1. 在 GitHub 上新建一个仓库¶
由于 git submodule 命令只能接远程仓库作为参数,因此此步骤需要我们在 GitHub 上新建一个仓库,用于存放我们的子模块。
如果你需要导入的子模块已经存在于 GitHub 上,那么你可以直接跳过这一步。
2. 将远程仓库以子模块形式添加到目标目录¶
进入目标目录中,然后使用 git submodule add 命令将远程仓库以子模块形式添加到主项目的目标目录。
git submodule add 命令的语法为:
git submodule add <远程仓库地址> <子模块目录>
因此我们执行:
cd src/plugins/mokabot_bandori
git submodule add https://github.com/zhanbao2000/bestdori.git bestdori
此时 src/plugins/mokabot_bandori 目录下会多出一个 bestdori 目录,这就是我们的子模块。
3. 在 PyCharm 中导入该 Git 仓库¶
目前为止,git 命令行已经知道这是一个子模块了,但是目前 PyCharm 还不知道这是一个子模块,甚至不知道这是一个 Git 仓库。
双击 Shift,输入 create,找到 创建 Git 仓库。
(由于主项目已经建立过本地的 Git 仓库,PyCharm 的 Git 工具栏将不再出现这个选项,因此只能在搜索里找到)
仓库目录选择我们的子模块目录 bestdori。
这里会提示是否要创建新的 VCS 根,选择 是。
4. 检查远程仓库映射是否成功¶
此时打开 Git 工具栏中的 管理远程.. 选项
可以看到刚刚的子模块 bestdori 已经成功映射到远程的 origin 了,那么说明操作成功。
5. 将子模块的变更提交到本地¶
随意进行一些变更,例如,在 PyCharm 中,在 bestdori 目录下新建一个文件。
PyCharm 会提示你是否要添加至 git,这里选 是,当然你也可以稍后自行添加。
添加一些内容后,进行提交。
可以看到一共有两个文件的变更,一个是我们刚刚在子模块中创立的 __init__.py,另一个是主项目的 .gitmodules,直接提交即可。
这两个文件将会分别提交到独立的本地 Git 仓库中。
之所以会有 .gitmodules,那当然是因为我们刚刚添加了新的子模块,这个文件只会在子模块被添加时更新一次。
6. 将子模块的变更推送到远程仓库¶
在 Git 工具栏中,点击 推送..。
可以看到共有两个仓库各一处变更,一处是子模块的 __init__.py,另一处是主项目的 .gitmodules,没有问题,直接推送即可。
推送后去 GitHub 上看,可以看到子模块 bestdori 的远程仓库已经成功推送了。
7. 将子模块的变更推送到主项目的远程仓库¶
再次进入提交页面,可以看到 bestdori 整个文件夹被列了出来。
勾选他,提交,然后推送。
可以看到刚刚的这次提交是属于主项目的,这一步的意义在于,通知主项目的 Git 远程仓库,子模块的远程仓库已经更新了。
推送后查看主项目的远程仓库:
可以看到主项目的远程仓库中已经正确识别了这是一个子模块。
(因为我第一次推送的截图没截上,所以我进行了第二次提交 + 推送,因此第 6 步和第 7 步截图中的提交消息、commit 版本是不一样的)
提示
之后每次想要对子模块进行一些更改,并使主项目同步变更,只需重复步骤 5 ~ 7 即可。









