git submodule常见问题收集

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huangqiang1363/article/details/83242242
1、刚刚git clone下来的项目,需要git submodule update --init --recursive将依赖的子项目done下来,结果抛了个(fatal: No url found for submodule path 'node-server' in .gitmodules)
''' 分析:为啥会抛错, 如提示, 检查下.gitmodules文件里是不是有node-server子项目的配置内容,如果没有请加上对应的配置即可;如果不需要这个子项目,那么直接删除node-server这个子项目文件即可. 与此同时还要删除关于node-server的缓存(git rm --cached node-server), 然后再尝试git submodule update --init --recursive即可; 如果子项目还是done不下来, 麻烦检查.gitmodules文件里指定的子项目地址是不是正确可用. '''

2、每次更新.gitmodules文件, 必须同步下(git submodule sync), 否则识别不到.

3、如何为一个项目添加一个子项目呢? git submodule add 项目地址, 然后push到你的远程仓库(如gitlab/github啥的),你可以在项目里看到“子项目名+@+序列号”的链接.

4、如何删除submodule呢?  git rm <submodule-name> || git submodule deinit <submodule-name>

5、一旦依赖的子项目过多(比如100个), 如何批量操作呢?  git submodule foreach <command>  
   eg: git submodule foreach git checkout master 
   # 该命令会按照.gitmodules里的path寻找所有的三方模块,并在每一个模块中都执行foreach后的命令
   eg: git submodule foreach git submodule update

6、更新了子项目, 那么父项目也需要更新. 即子项目属于父项目的一部分, 在子项目commit后, 父也需要.

7、如何将一个包含子项目的项目所有内容都clone下来呢? 当然第1条笔记也是可以的.
   git clone https://xxx.xx.xxx/xxxx/xxx.git
   git submodule init && git submodule update
   # 下面这一句的效果和上面三条命令的效果是一样的,多加了个参数  `--recursive`
   git clone https://xxx.xx.xxx/xxxx/xxx.git --recursive

最后附上权威的文档链接:https://git-scm.com/book/zh/v2/Git-%E5%B7%A5%E5%85%B7-%E5%AD%90%E6%A8%A1%E5%9D%97

猜你喜欢

转载自blog.csdn.net/huangqiang1363/article/details/83242242