创建公用仓库
创建一个仓库esd_esp32-c3_modules作为公用模块,同时也为项目的子模块,https://git.com/xxxxxt_embedded/esd_esp32-c3_modules
以下为middleware、aws-iot和esp-idf共同的公用仓库,middleware为我司代码,sdk中为esp开源源码,分支为master,同时因为sdk的esp-idf和esp-aws-iot也是作为公用仓库esd_esp32-c3_modules的子模块,所以需要先添加这两个git仓库到本仓库中
$ git submodule add https://github.com/espressif/esp-aws-iot.git
$ git submodule add https://github.com/espressif/esp-idf.git
Clone完成之后,项目中多出了一个.gitmodules的文件,里面内容为esp的git url链接,文件该配置文件保存了项目URL与已经拉取的本地目录之间的映射,需要保持这个链接的权限被使用此模块的人拥有(sdk中的权限不需要管理,但esd_esp32-c3_modules仓库的权限需要我们管理)。
添加公用仓库
创建一个esp32c3仓库,作为公共框架,也就是具体项目的代码,也叫父项目
https://gitee.com/xxxxxx/esp32c3.git
主分支为master,此为公共框架同步公共功能或者修改公共bug的master分支,此分支指定技术负责人负责维护管理,任何的分支合并、同步、bug修改、推送只能有负责人的记录,这是为了便于管理,且保证master的head为正确的方向。
以下为项目开发成员需要用到的:
需要开发具体项目从master分支切出一个项目分支出去开发,项目分支技术负责人需要随时保持主分支的修改同步到项目分支,维持最新改动。
因为modules仓库中也包含了esp的仓库,所以我们clone mudules时如果使用git clone https://gitee.com/xxxxxx/esp32c3.git
会发现只有middleware,但是sdk中并没有文件
所以必须运行两个命令:git submodule init用来初始化本地配置文件,而git submodule update则从该项目中抓取所有数据并检出父项目中列出的合适的提交。
不过还有更简单一点的方式。如果给git clone指令传递--recurse-submodules选项,它会自动初始化并存储更新中的每一个子模块,包括可能的指令存在子模块。git clone --recurse-submodules https://gitee.com/xxxxxx/esp32c3.git
如果你已经克隆了项目但忘记了--recurse-submodules,那么可以运行git submodule update --init 将git submodule init和git submodule update合并成一步git submodule update --init --recursive。
项目分支成员请不要推送代码到子模块中,如需要更新最新mudules代码请进入esd_esp32-c3_modules文件夹中使用git submodules update同步最新代码即可