如何设置 .gitmodules 以便贡献者不必分叉子模块?

How to set .gitmodules so that contributors don't have to fork also submodule?

我在 github

上有一个图书馆
my_library
  |-- my_submodule 

.gitmodules

[submodule "my_submodule"]
    path = my_submodule
    url = ../my_submodule.git
    branch = master

我的贡献者现在需要将回购 my_library 和回购 my_submodule 分叉到他们的 github,然后才能 git clone --recurse-submodules https://github.com/<contributor_user_name>/my_library

否则他们会得到

...
Submodule 'my_submodule' (https://github.com/<contributor_user_name>/fastai-docs.git) registered for path 'docs'
Cloning into 'my_submodule'...
Username for 'https://github.com': <contributor_user_name>   
Password for 'https://<contributor_user_name>@github.com': 
remote: Repository not found.
fatal: repository 'https://github.com/<contributor_user_name>/my_submodule.git/' not found
fatal: clone of 'https://github.com/<contributor_user_name>/my_submodule.git' into submodule path 'my_submodule' failed

我该怎么做,贡献者也不需要分叉 my_submodule ?

您提交了一个 .gitmodules 文件,其中 url 是相对于根回购源的。

将此相对 url 替换为绝对 url 到您的存储库:https://github.com/RichardYY/fastai-docs.git


用户(包括您自己)可以使用 git 配置 url.[replacement url].insteadOf (example in this gist) 连接到其本地克隆上的不同存储库:

# for example : if you want to access this repo through ssh on your local clone :
git config url."git@github.com:RichardYY/fastai-docs.git".insteadOf https://github.com/RichardYY/fastai-docs.git

如果您指定 相对路径 作为子模块的 URL,Git 将假定子模块的存储库与主模块位于同一位置存储库。

来自documentation

If the URL is given relative to the superproject’s repository, the presumption is the superproject and submodule repositories will be kept together in the same relative location, and only the superproject’s URL needs to be provided. git-submodule will correctly locate the submodule using the relative URL in .gitmodules.

如果您不希望您的贡献者也必须克隆子模块的存储库,您应该在 .gitmodules:

中指定它的绝对 URL
[submodule "my_submodule"]
    path = my_submodule
    url = https://github.com/<your_user_name>/my_submodule.git
    branch = master

这样,Git 将从您的 GitHub 帐户而不是他们的获取子模块的存储库。