Git Submodule

Apr 20, 2024 · 4min

    在项目中需要使用到 gRPC,无论是前端还是后端都需要使用同一份 proto 文件。
    前端和后端分别存储在不同的仓库,例如 MojiChat 和 MojiChatServer,那么我需要将 proto 文件放在哪个仓库或位置比较好呢?如果将这两个存储库移动到同一个新的存储库中,再将 proto 文件放到这个存储库中那么就实现可以前后端公用一个 proto 文件。

    这操作比较危险,而且如果有其它项目需要用到这个 proto 文件就得加入这个存储库,不太理想。

    干脆直接创建一个存储库专门存储这个 proto 文件,例如:moji-chat-proto
    如果需要使用这个 proto 直接 clone 这个存储库即可。通过 Git Submodule 可以完美解决我们这个问题!

    通过 git submodule add 命令添加目标仓库(url 是目标地址 例如 ssh)

    git submodule add <url> <target_path>
    • <url> - 是存储库地址
    • <target_path> - 是这个存储库在目标项目的存放地址

    此时会在项目 root path 中添加 .gitmodules 文件,其内容为

    [submodule "src-tauri/src/protos"]
      path = src-tauri/src/protos
      url = [email protected]:moji-open-source/moji-chat-proto.git

    最后将其 push 到仓库即可,它不会将 git submodule 中的源码提交。

    如果你 clone 一个存在 git submodule 的仓库,那么通过 git pull 命令只能克隆该项目本身而无法克隆其子模块。

    如果需要克隆当前项目及其所有子模块,那么可以添加 --recursive 参数

    git clone --recursive <url>

    或者 git pull --recurse-submodules 拉取所有子模块

    如果只是需要更新子模块,那么执行这个命令即可

    # git 1.8.2 及以上版本
    git submodule update --recursive --remote
    # git 1.7.3 及以上版本
    git submodule update --recursive
    ```

    >

    cd ..
    CC BY-NC-SA 4.0 2024-PRESENT © Clover You