这篇文章上次修改于 1181 天前,可能其部分内容已经发生变化,如有疑问可询问作者。

今天在为米切机器人(NoneBot2)编写插件时希望其中编写的插件也能在Github进行独立的发布。起初我尝试将插件目录放置于机器人的项目根目录之外,让各插件仓库与机器人仓库相互独立,但Python的NoneBot2并不能从更高的父级目录中加载插件,这一想法至此废弃。之后我将思路转向使用git中的submodule(子模块),它能有效的将多个仓库独立存储发布,并能够在主要仓库的浏览中链接到子仓库,而不重复存储。

接下来是使用过程中的一些流程记录:

独立建仓

  1. 使用mv或者cp命令将准备作为子模块的插件移出主仓库目录
  2. 在子模块目录中独立创建Git仓库,并同步推送到新仓库
    echo "# <name>" >> README.md
    git init
    git add README.md
    git commit -m "first commit"
    git branch -M main
    git remote add origin <url>
    git push -u origin main

添加子模块

接下来将新的仓库链接作为子模块添加到主仓库的指定路径

    git submodule add <url> <path>

Submodule 详细用法

添加

    git submodule add <url> <path>
  • 为子模块Git地址
  • 为子模块存储路径

删除

添加了错误的路径或子项目出现问题时可以对子项目进行删除,步骤如下

    rm -rf <path> 
    vim .gitmodules (删除.gitmodules文件中子模块相关条目)
    vim .git/config (删除配置项中子模块相关条目)
    rm .git/module/<path> (删除目录中的对应子模块)

更新

先对主项目pull,然后执行更新

    git pull
    git submodule update

仓库管理

克隆带子模块的仓库

方法1:先克隆主项目,再初始化与更新子项目

    git clone <url>
    cd <path>
    git submodule init
    git submodule update

方法2:[推荐] 使用递归参数克隆

    git clone <url> --recursive