如何在不将子模块提交推送到子模块的上游存储库的情况下从中央存储库中提取子模块提交?
例如,假设我有一个中央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
子模块所做的更改?
答案 0 :(得分:2)
他们如何提取我对B子模块所做的更改?
不能。如果要更改子模块,则需要将存储库的派生托管在某个位置,以将更改推送到该存储库。然后,当您添加子模块时,将使用您的存储库URL而不是上游存储库:
git submodule add https://new.repository.host/B.git myB
通常,对于GitHub托管的存储库,您只需分叉存储库然后使用它即可。
您可能希望定期将自己的更改基于上游存储库,以便合并任何上游更改。