跟踪从存储库克隆的子模块分支

Track submodule branch in cloned-from repository

如何从中央存储库中提取子模块提交,而不将子模块提交推送到子模块的上游存储库?

例如,假设我有一个中央 git 存储库 A,我克隆了它:

git clone /path/to/A myA1

现在我添加一些不属于我的存储库作为子模块:

git submodule add https://.../B.git myB
git commit -m "Added B submodule"

我对 B 子模块添加了一些更改并提交它们:

cd myB
echo foo >> x.txt
git add x.txt
git commit -m "changes in local B"
cd -
git commit -m "changes in submodule"
git push   # push commits in local myA1 to central repo A

但是我无法将 myB 中的提交推送到 B 上游,因为我无法写入 B(它是 Github 上的某个存储库) .当我的同事克隆中央存储库 A 时,他们的子模块引用上游 B 存储库,而不是 A:

中的那个
git clone /path/to/A myA2

他们在 .gitmodules 中的 url 条目指向 https://.../B.git,其中不包含我的提交更改。

他们如何提取我提交给 B 子模块的更改?

How can they pull the changes I committed to my B submodule?

你不能。如果你想对子模块进行更改,你需要在某个地方托管该存储库的一个分支,你可以将更改推送到该位置。然后,当您添加子模块时,您将使用您的存储库 url 而不是上游存储库:

git submodule add https://new.repository.host/B.git myB

通常,对于 GitHub 托管存储库,您只需分叉存储库然后使用它。

您可能希望定期在上游存储库上重新设置您自己的更改,以便合并任何上游更改。