如何推送具有子模块的分叉存储库?

时间:2012-06-29 09:38:36

标签: git git-submodules

有一个A项目,A项目有一个子模块S
一个
| -S
| -B
| -C

  

回购:git@github.com: benjamin / A .git
  S repo:git@github.com:所有者 / S .git

为了提供一些错误修复,我分叉了A存储库并克隆了它。

$ git clone git@github.com:benjamin/A.git

然后下载submodule S我命令

$ git submodule init
$ git submodule update

好的,代码树做得很好,我将错误修复为A中的文件和S中的文件。
提交并推送这两个文件,

$ cd S
$ git add modified_file
$ git commit -a -m 'submodule commit'
$ git push

但推动不起作用。

  

错误:对所有者/ S.git的许可被拒绝给本杰明   致命:远程端意外挂断

我是否也应该分叉S存储库?在这种情况下你怎么做?

1 个答案:

答案 0 :(得分:2)

是的,子模块本身就是一个git repo 你需要

  • fork repo,
  • 克隆他们两个,
  • 在本地AS之间创建一个符号链接(仅用于编译代码,即不要在本地使用S子模块状态)
  • 在本地回复提交您的更改并将它们推送到您的相应分支
  • 发出两个拉取请求(一个用于A,一个用于S

只有AS的维护者才能:

  • S中提交您的拉取请求并提交
  • A
  • 中应用您的提款请求
  • A中提交,记录S(子模块)的新SHA1以及A中的更改。

Mark Longair提到您可以:

  • 克隆你的A
  • 的分支
  • git submodule init
  • git submodule update(将S克隆到右侧SHA1,但将“S”作为远程,而不是“forked-S
  • cd S
  • git remote set-url origin <SSH-url-of-fork-of-S>
  • git checkout -b my-changes-to-S:创建一个分支,以记录您的本地修改,并避免进入detached HEAD mode