1

プロジェクトがありA、A プロジェクトにはサブモジュールS
A
|-S
|-B
|-C があります。

リポジトリ: git@github.com: benjamin / A .git
S リポジトリ: 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
2 つのファイルをコミットしてプッシュするには、

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

しかし、プッシュは機能しません。

エラー: 所有者/S.git へのアクセス許可がベンジャミンに拒否されました。
致命的: リモート エンドが予期せず電話を切りました

Sリポジトリもフォークする必要がありますか?この場合はどうしますか?

4

1 に答える 1

2

はい、サブモジュールはそれ自体が git リポジトリです。
必要がある

  • 両方のレポをフォークし、
  • それらの両方を複製し、
  • Aとローカルの間でシンボリック リンクをS作成します (コードをコンパイルするためだけに、つまり、ローカルのサブモジュールの状態を気にしないでくださいS) 。
  • 両方のローカルリポジトリで変更をコミットし、それぞれのフォークにプッシュします
  • 2 つのプル リクエストを作成します (1 つは 用A、もう 1 つは 用S) 。

Aとのメンテナのみが次のSことができます。

  • プルリクエストを適用しSてコミットする
  • プルリクエストを適用しますA
  • でコミットし、 (サブモジュール)Aの新しい SHA1 と での変更を記録します。SA

Mark Longairは、次のことができると述べています。

  • のフォークを複製しますA
  • git submodule init
  • git submodule updateS(これは正しい 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 に答える