使用Git子模块开发时无意中发现可以在主仓库的子仓库路径中提交代码

 

之前我们使用子模块的时候,都是在主仓库中修改主仓库的代码,子仓库修改子仓库的代码。然后子仓库有需要修改的代码都是在子仓库对应的代码中修改,然后主仓库通过git submodule update来更新子仓库的代码并且提交。

 

先把目前的代码结构图画一下吧

使用Git子模块开发时无意中发现可以在主仓库的子仓库路径中提交代码

有次我直接在主仓库的子仓库路径下面修改了内容(左侧MainProject路径下的submoduleA路径),然后提交到远程了git pull origin master(这里的远程是指子仓库的远程,master也是说的是子仓库的master分支)。我以为我操作错了,然后我在子仓库(右侧submoduleA仓库的路径)里git pull --rebase发现更新到了上次的修改了。然后我就查了一些资料,然后发现我的操作没有错误,是正确的。

也就是说submodule可以直接在子仓库中修改,也可以在主仓库中修改。两者修改的效果是一样的。

参考资料中掘金上的文章 提交子模块修改 一节中提到过这种用法:

使用Git子模块开发时无意中发现可以在主仓库的子仓库路径中提交代码

 

参考资料:

https://juejin.im/entry/59a0046b518825243d1f05be

https://zhuanlan.zhihu.com/p/97761640

https://git-scm.com/book/en/v2/Git-Tools-Submodules  ==》中文翻译  https://git-scm.com/book/zh/v2/Git-工具-子模块