yaoningvital / blog

my blog
31 stars 4 forks source link

主项目与子项目关联的总结 #212

Open yaoningvital opened 4 years ago

yaoningvital commented 4 years ago

一、对项目构成的理解

1、zny-boilerplate 是一个主项目,项目策划、合同管理、设计管理等是子项目。

2、主项目与子项目以 git submodule 的方式进行关联。主项目与子项目是相互独立的项目,分别有自己的Git仓库。通过 git submodule ,可以将子项目的仓库克隆到主项目中,同时还保持提交的独立。

二、主项目与子项目关联的演示

1、准备子项目

$ mkdir <submodule-name> && cd <submodule-name>
$ git init
$ mkdir <filefolder-name>
$ touch <file-name>
$ git add .
$ git commit -m "<commit-message>"
$ git remote add origin <remote-repos-url>
$ git push -u origin --all

2、在主项目中添加子项目

$ git submodule add <submodule-repos-url> <path>
$ git status
$ git add .
$ git commit -m "<commit-message>"
$ git push

3、克隆含有子模块的项目

方式一

// 克隆一个含有子模块的项目
$ git clone <main-project-repos-url>  
// 克隆完成之后,项目中有之前添加的子模块目录(如 biz-test),不过是空的

// 初始化本地配置文件
$ git submodule init
// 命令执行完成后,将看到类似下面的提示:
// Submodule 'biz-test' (https://hyperv28.msdi.cn/tfs/Power5DBIM/PRP_Front/_git/biz-test) registered for path 'biz-test'

// 从该项目中抓取所有数据并检出父项目中列出的合适的提交
$ git submodule update
// 该命令执行完后,子目录(biz-test)是处在和之前提交时相同的状态了。

方式二

// 克隆一个含有子模块的项目
$ git clone <main-project-repos-url>  

// 将 git submodule init 和 git submodule update 合并成一步完成
$ git submodule update --init

方式三

// 克隆一个含有子模块的项目
$ git clone <main-project-repos-url>  

// 将 git submodule init 和 git submodule update 合并成一步完成,并检出任何嵌套的子模块
$ git submodule update --init --recursive 

方式四

// 克隆一个含有子模块的项目
$ git clone --recurse-submodules <main-project-repos-url>  

4、在主项目中拉取子项目的更新

方式一

// 进入主项目中的子模块所在目录,手动抓取更新
$ git fetch

// 在子模块所在目录,合并上游分支来更新本地代码
$ git merge origin/<branch-name>

// 或者,进入子模块所在目录,直接用 git pull 拉取子模块的更新
$ git pull

方式二

// 在主项目根目录,执行下面的命令,Git将会进入子模块,然后抓取并更新
$ git submodule update --remote

5、主项目中更新了子模块的内容,在子项目中拉取该更新

// 进入主项目中的子模块所在目录,提交更新并推送
$ cd <submodule-dir>
$ git add .
$ git commit -m <commit-message>
$ git push

// 在子项目中,直接 git pull
$ git pull