iOS 中有一个第三方数据库封装:GRDB。该组件使用了 git submodule 来依赖 SQLiteLib。

这个时候如果我们只使用之前介绍过的 设置 SPM Mirror,那么这个子模块就会是一个漏网之鱼。

那么怎么为这个子模块设置镜像呢?我们可以使用 git config --global url.[New].insteadOf [Old] 命令来替换 url 中的某个部分。可以参考:Easier Git Repository Cloning with insteadOf

--global 参数是必须的,spm 的加载读取的是 ~/.gitconfig 文件,不会读取项目根目录下的 .git/config 文件。所以这个替换必须设置为全局替换的。

New 是镜像 url,而 Old 是 github url,设置后我们可以通过 git config --global -l 或者 git config --global -e 命令来查看是否设置成功。

设置成功后不论是执行 git clone 或者 git submodule update --init,都会通过镜像 url 去执行了。

如果你想在团队项目中共享这份配置,那么可以将地址存储到一个文件中,比如像下面这样:

# .gitconfig-insteadof

[url "https://github.com/swiftlyfalling/SQLiteLib.git"]
  insteadOf = https://your-organize-git/SQLiteLib.git

然后通过 git config --global include.path .gitconfig-insteadof 将这个配置文件添加到 ~/.gitconfig 文件中即可。

添加后 ~/.gitconfig 内容会如下所示:

...

[include]
  path = /Users/.../project/.gitconfig-insteadof