Git仓库submodule使用咨询:可否将submodule作为克隆仓库操作?
Git Submodule 常规开发操作可行性解答
结论:完全可行,Submodule本身就是独立的完整Git仓库,支持所有普通Git仓库的操作,包括切分支、修改、提交、推送。
核心原理
Submodule的本质是主仓库仅记录对应子仓库的特定commit哈希值,子仓库本身的提交历史、远程配置、分支管理逻辑完全独立,和单独克隆的普通Git仓库没有任何区别。
对你给出的操作流程的说明
你贴的操作本身逻辑没有问题,仅需要注意几个关键点:
- 执行
git submodule update默认会将子仓库置于detached HEAD状态,指向主仓库记录的固定commit,此时你执行git checkout -b test-branch从该节点切出新分支开发是完全合规的操作 - 子仓库内的
git commit、git push操作只会作用于子仓库自身的远程仓库,不会自动修改主仓库的关联记录 - 子仓库的新提交推送完成后,如果需要让主仓库关联该新版本,你需要回到主仓库根目录,提交子仓库的commit引用变更,否则其他协作者拉取主仓库时,子仓库仍然会指向旧版本的commit。
额外开发建议
- 如果日常需要频繁在子仓库内开发,可以在更新子仓库时使用
git submodule update --remote --merge命令,直接将子仓库更新为对应远程分支的最新提交,省去手动拉取的步骤 - 主仓库提交子仓库引用变更前,务必先确保子仓库的新提交已经推送到它自身的远程仓库,否则其他协作者拉取主仓库后会因为找不到对应子仓库commit而报错。
内容的提问来源于stack exchange,提问作者Alberto
相关产品推荐
相关产品推荐

