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

时间:2019-05-14 16:29:34

标签: git git-submodules

如何在不将子模块提交推送到子模块的上游存储库的情况下从中央存储库中提取子模块提交?

例如,假设我有一个中央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

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

他们如何提取我对B子模块所做的更改?

1 个答案:

答案 0 :(得分:2)

  

他们如何提取我对B子模块所做的更改?

不能。如果要更改子模块,则需要将存储库的派生托管在某个位置,以将更改推送到该存储库。然后,当您添加子模块时,将使用您的存储库URL而不是上游存储库:

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

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

您可能希望定期将自己的更改基于上游存储库,以便合并任何上游更改。