Git submodule

添加 submodule

假设当前 git 项目路径为 /home/lizs/app/project/

git submodule add submoduleUrl localPath
  • submoduleUrl:submodule 仓库路径,如:https://github.com/lizs/hello.git

  • 不指定 localPath,submodule clone 下来的项目会在当前目录,并且 submodule 的项目名就是 submodule 的根目录

    git submodule add https://github.com/lizs/hello.git
    

    submodule clone 下来的项目会在当前目录下,并且会用项目的名称作为submodule的根目录,也就是说,submodule的路径为 /home/lizs/app/project/hello

  • 如果添加 localPathlocalPath不能够是已经存在的目录。并且 submodule 会以 localPath 作为根目录。

    git submodule add https://github.com/lizs/hello.git www/
    

    submodule clone 下来的项目在当前目录下的 www 目录下,即 /home/lizs/app/project/www/

    git submodule add https://github.com/lizs/hello.git www/hi
    

    submodule clone 下来的项目在当前目录下的 www/hi 目录下,即 /home/lizs/app/project/www/hi

    localPath 不能够是已经存在的目录,是指路径的最后一层目录不能够已经存在。如果,localPathwww,即当前目录下不能够有 www 目录。如果 localPathwww/hi,即当前目录下可以有 www 目录(没有则会自动创建),但是 www 目录下不能够有 hi 目录。

  • 添加完成之后,会在当前项目跟路径下生成一个 .gitmodules 文件,其中记录了子模块的信息。


更新 submodule

进入 submodule 目录下,将更新内容推送到 submodule 的仓库即可。


删除 submodule

How do I remove a submodule?


克隆的项目中带有 submodule

git clone 下来的项目中带有 submodule 时,初始化的时候,submodule 的内容并不会自动下载下来。此时,只需执行:


git submodule update --init --recursive