用自己的fork交换git子模块

时间:2012-07-24 18:36:30

标签: git github fork git-submodules

我在我的git repo中添加了一个子模块:

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

我已经决定要创建该库的分叉来进行一些调整。我如何交换该子模块,以便它指向我自己的github fork呢?

2 个答案:

答案 0 :(得分:39)

子模块存储在.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系统看起来有些不完整(例如参见the instructions to remove a submodule

,但可能只有submodule个命令可以做到这一点。

答案 1 :(得分:3)

我不知道这是多久,但即使在相当古老的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 checkout -b my_new_idea
git push -u myrepo my_new_idea

现在子模块使用fork而不是原始repo。您可以正常push, pull, rebase等。合并拉取请求后,您可以使用正常git remote remove myrepo删除遥控器。当然,关于使用子模块的所有其他警告都适用(例如,您必须将子模块的更改作为超级模块中的新提交提交)。