web-dev-qa-db-ja.com

gitサブモジュールの編集

これは可能ですか?親と子のプロジェクトがあると想像してみてください。どちらもgitリポジトリです。子は親のサブモジュールです。

親の中にある子のバージョンを編集して、通常のリポジトリと同じようにコミットしてプッシュできますか?

または、変更を加える場所に別の子のクローンが必要ですか?

ありがとう。

29

個別のクローンは必要ありません。サブモジュールフォルダは独自の世界です。編集、コミット、ブランチ、そしてプッシュするだけで心から喜ばれます。

Gitはそのように素晴らしいです。 :-)

ところで、親リポジトリは、サブモジュールフォルダ内で変更が発生したことを検出し、親リポジトリのクローンの新しい公式参照ポイントとしてサブモジュールの現在の状態をコミットするように提案します。

重要な注意:

必ずgit checkout master(または他のブランチ)ハッキングを開始する前のサブモジュールフォルダー内。

次に、サブモジュールの更新された状態をコミットするときに、それらのコミットをパブリックリポジトリにPushするか、少なくともサブモジュール内の履歴をリベースまたは変更しないことを確認してください。その後のモジュール-サブモジュールの履歴への親の参照が破損するため。

注意して踏みます。 (リマインダーについては、@ pjmorse へのハットチップ。)

結論:

はい。サブモジュールフォルダ内での開発は可能であり、多くの場合便利ですが、リスクがないわけではありません。開発モデルを賢く選択する

35
Már Örlygsson

ドキュメント によると:

サブモジュール内で変更を加える場合は、最初にブランチをチェックアウトし、変更を加え、サブモジュール内で変更を公開してから、スーパープロジェクトを更新して新しいコミットを参照する必要があります。

私が知る限り、サブモジュールが追加されたブランチで作業している場合は、子を編集してそのリポジトリにプッシュバックできます。ただし、ChildをParentに追加した開発者でない場合は、切り離されたヘッドで作業しているため、変更を加えるには別のバージョンのChildをチェックアウトするか、変更を加えてパッチをエクスポートする必要があります(git format-patchを使用)他の誰かがコミットするために(git am経由で)。

7
pjmorse