用自己的fork交换git子模块

Svi*_*ish 26 git fork github git-submodules

我在我的git repo中添加了一个子模块,如下所示:

$ git submodule add git://github.com/user/some-library some-library
Run Code Online (Sandbox Code Playgroud)

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

dbr*_*dbr 41

子模块存储在.gitmodules:

$ cat .gitmodules
[submodule "ext/google-maps"]
    path = ext/google-maps
    url = git://git.naquadah.org/google-maps.git
Run Code Online (Sandbox Code Playgroud)

如果url使用文本编辑器编辑,则需要运行以下命令:

$ git submodule sync
Run Code Online (Sandbox Code Playgroud)

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

可能有一种方法只用git命令来做,虽然submodule系统似乎有点不完整(例如,请参阅删除子模块的说明)

  • `git submodule sync`命令可用于将.git/config与.gitmodules中的更改同步 (6认同)
  • 只是想指出一些可能不言自明的东西:我想使用我的fork,因为我做了一些我想要的提交.更新子模块URL和同步不包括任何新提交,它只检查新fork中的相同提交.要获得最新版本,您仍需要cd进入子模块,checkout master(或其他),然后在父repo中提交新版本的子模块. (2认同)

mce*_*epl 7

我不知道它是多长时间,但当然即使在相当老的 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
Run Code Online (Sandbox Code Playgroud)

现在子模块与您的 fork 一起工作,而不是原始 repo。你可以做 normalpush, pull, rebase等。当你的 pull request 被合并后,你可以用 normal 删除远程git remote remove myrepo。当然,有关使用子模块的所有其他警告都适用(例如,您必须将子模块的更改作为超级模块中的新提交进行提交)。