用自己的 fork 交换 git 子模块

问题描述 投票:0回答:2

我向我的 git 存储库添加了一个子模块,如下所示:

$ git submodule add git://github.com/user/some-library some-library

我决定创建该库的一个分支来进行一些调整。我如何交换该子模块,使其指向我自己的 github 分支?

git github git-submodules git-fork
2个回答
67
投票

子模块存储在

.gitmodules
:

$ cat .gitmodules
[submodule "ext/google-maps"]
    path = ext/google-maps
    url = git://git.naquadah.org/google-maps.git

如果您使用文本编辑器编辑

url
,则需要运行以下命令:

$ git submodule sync

这会更新

.git/config
,其中包含此子模块列表的副本(您也可以手动编辑
[submodule]
的相关
.git/config
部分)

可能有一种方法可以仅使用

git
命令来完成此操作,尽管
submodule
系统似乎有点不完整(例如,请参阅删除子模块的说明


11
投票

我不知道这有多长,但可以肯定的是,即使在相当旧的 git 1.8 子模块中也有遥控器。所以,你可以做

cd some-library   # this is entering the submodule
git remote -v     # just to see what you have; I guess origin only
git remote add myrepo git-URL-of-the-fork
git fetch myrepo
git checkout -b my_new_idea
git push -u myrepo my_new_idea

现在子模块可以与您的分支而不是原始存储库一起使用。您可以执行正常的

push, pull, rebase
等操作。当您的拉取请求被合并时,您可以使用正常的
git remote remove myrepo
删除远程。当然,有关使用子模块的所有其他注意事项都适用(例如,您必须将子模块的更改作为超级模块中的新提交提交)。

© www.soinside.com 2019 - 2024. All rights reserved.