一、适用场景:

      某个工作中的项目需要包含并使用另一个项目。 也许是第三方库,或者你独立开发的,用于多个父项目的库。 现在问题来了:你想要把它们当做两个独立的项目,同时又想在一个项目中使用另一个

二、如何解决?

     Git 通过子模块来解决这个问题。 子模块允许你将一个 Git 仓库作为另一个 Git 仓库的子目录。 它能让你将另一个仓库克隆到自己的项目中,同时还保持提交的独立。

三、解决示例:

  1. 首先在github建立仓库(演示如何在一个被分成一个主项目与几个子项目的项目上开发)

      2.首先clone 主项目。  ls 查看文件

      3.将子module添加到主项目中. -->   git submodule add “module git地址”

                                                        -->  ls (查看文件)

                                                        --> git status  (可以看到新增 .gitmodules 文件->保存此项目与主项目之间的映射关系,通.gitignore一样进行版本控制)

       4. git diff  --cached  "module名"     

           git diff  --cached --submodule   (查看差异)

      5.将module提交到主项目上。 

        git commit -am '****'  只是做为记录,非真实提交。  

        git push  origin master  进行提交

     

6.克隆含有子模块的项目,在克隆这样的项目时,默认会包含该子模块目录,但子模块中还没有任何文件

         git clone '项目---带有子项目'

         必须运行两个命令:git submodule  init   ->(初始化本地配置文件)

                                          git submodule updata  ->(从该项目中抓取所有数据并检出父项目中列出的合适的提交)

         或者 git clone --recurse-submodules   '有子模块的项目git地址'  ->(自动初始化并更新仓库中的每一个子模块, 包括可能存在的嵌套子模块)

         在或者已经克隆了项目时,使用 git submodule update --init    -> (一次操作命令)  进行自module下载

   7.从项目远端拉取上游更改

            站在协作者的视角,他有自己的 主项目仓库的本地克隆, 只是执行 git pull 获取你新提交的更改还不够:默认情况下,git pull 命令会递归地抓取子模块的更改,然而,它不会 更新 子模块。为了完成更新,你需要运行 git submodule update --init --recursive  (recursive子模块嵌套)。

           或者一次命令拉取所有内容。 git pull --recurse-submodules ;

    异常情况,子模块更换地址,则需要如下处理

# 将新的 URL 复制到本地配置中
$ git submodule sync --recursive
# 从新 URL 更新子模块
$ git submodule update --init --recursive

8.在子模块上工作(演示如何在子模块与主项目中同时做修改,以及如何同时提交与发布那些修改

    

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐