当前位置:   article > 正文

git submodule使用以及注意事项_git submodule 仓库为本地地址

git submodule 仓库为本地地址

一、背景

在平时的软件开发过程中常常会有这样的场景,自己负责的某个模块会依赖其他模块或者第三方的library。这时你自己的模块是一个独立的代码仓库,你想要实现这样一种功能,当你从你的模块的代码仓库里把代码拉到本地来的时候,能自动的将你依赖的模块或第三方库都拉到指定的目录当中去。

当然要实现这个功能的方法有很多,比如使用repo之类的工具,又比如如果你使用的是svn作为版本管理工具,那么你可以使用svn的external机制来引用第三方的project。

这里要说的是使用git作为版本管理工具的情况。

二、git submodule

其它的细枝末节就不再赘述了,咱直奔主题。

先来看具体用例:

目前有一个模块A,其代码仓库的地址为:projectA.git, 它需要引用另一个模块B, 其代码仓库的地址为:projectB.git。
假设模块A的本地目录为:projectA
希望引用模块B为模块A的子模块,其在模块A目录下的路径为: projectA/projectB

这里我们通过git 的submodule机制来实现。

比如在命令行里可以直接使用如下命令:

cd projectA
git submodule add projectB.git projectB
  • 1
  • 2

注: 这个submodule的 子目录指定时不能以 “/”结尾, 比如上面的命令,就不能写成 projectB/ 这个样子。

就这么简单的一句git命令就可以搞定了,当然这还没完,运行完这个命令之后,在projectA目录执行git status命令,可以看到如下的结果:
在这里插入图片描述
这时需要使用git commit命令和git push命令,将添加模块B为模块A的子模块的结果push到模块A的代码仓库里面去。

下面是add命令后使用 git ls-tree master命令可以查看master分支的对象树的结构:

$ git ls-tree master
100644 blob 31dbbaf60a542b4faf13582b770526ae37b0c094    .gitmodules
040000 tree fd44ee11cfbd6d111c918010c2206ff383a6bdcd    projectB
100644 blob 259b24152b284e29e86afadf714ddc3c2aa8dfe8    README
  • 1
  • 2
  • 3
  • 4

三、git clone包含子模块的代码仓库

此时,就可以使用git clone命令来抓取模块A的代码仓库,但要同时抓取到子模块的仓库的话,还需要一些方法:

  • 1.正常的使用git clone命令,然后再使用 git submodule initgit submodule update来获取子模块

    git clone projectA.git
    cd projectA
    git submodule init
    git submodule update
    
    • 1
    • 2
    • 3
    • 4

    其运行结果如下:

    在这里插入图片描述

  • 2.在使用git clone命令时,加上–recurse-submodules–recursive 这样的递归参数

    git clone --recursive projectA.git
    
    • 1

    其运行结果如下:

    在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/407299
推荐阅读
相关标签
  

闽ICP备14008679号