1

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

A repo:git@github.com:benjamin / A .git
S repo:git@github.com:owner / 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存储库吗?在这种情况下你会怎么做?

4

1 回答 1

2

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

  • 分叉两个回购,
  • 克隆他们两个,
  • A在和本地之间建立一个符号链接S(只是为了你的代码编译,即不要打扰S本地的子模块状态)
  • 在两个本地仓库中提交您的更改并将它们推送到您各自的分支
  • 提出两个拉取请求(一个用于A,一个用于S

只有维护者A才能S

  • 应用您的拉取请求S并提交
  • 应用您的拉取请求A
  • 提交,记录(子模块)A的新 SHA1和.SA

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:创建一个分支以记录您的本地修改,并避免处于分离HEAD模式
于 2012-06-29T09:58:16.837 回答