将 git 个子模块从一个仓库复制到另一个仓库

Copy git submodules from one repo to another

我正在开发一组库,这些库依赖于一组通用的其他库。

我想将一个包含所有必要子模块的存储库中的 .gitsubmodules 文件复制到所有其他存储库中。

但是我似乎无法 git 识别子模块文件,或以其他方式将子模块拉入新存储库。

Git 需要两件事来实现子模块:

  1. 来自 .gitmodules 文件的配置,以及
  2. 索引中相应的 commit 条目...您通过 运行ning git submodule add.
  3. 获得

这是明确的 in the documentation,它说明了 git submodule init 命令:

Initialize the submodules recorded in the index (which were added and committed elsewhere) by setting submodule.$name.url in .git/config. It uses the same setting from .gitmodules as a template....

实际上,这意味着您需要为每个子模块 运行 git submodule add。如果您经常这样做,您可以编写一个脚本,从 .gitmodules 文件和 运行 适当的 git submodule add 命令中读取子模块配置。可能是这样的:

#!/bin/bash

submodules=( $(git config -f .gitmodules --name-only --get-regexp 'submodule\..*\.path' | cut -f2 -d.) )
for name in "${submodules[@]}"; do
    path="$(git config -f .gitmodules --get submodule."$name".path)"
    url="$(git config -f .gitmodules --get submodule."$name".url)"

    git submodule add "$url" "$path"
done