Gerrit/merge submodule/ja

Gerrit で下位モジュールを親プロジェクトにマージしたい場合 (つまり、別々にしておく意味がない場合) は、以下の手順に従います. Gerrit へのプッシュを成功させるには、マージ コミットをプッシュするための Gerrit 権限が必要であることにご注意ください.

まず、下位モジュールのリビジョンをメイン モジュールのリポジトリに入れる必要があります. そうしないと、マージしたツリーをプッシュしようとしたときに、Gerrit はそれらをすべて新しいチェンジセットとして解釈しようとします. Probably the easiest way to do this is to create a personal sandbox containing those revisions. これを行うには、下位モジュールのリモートをローカル リポジトリに追加し、それに基づいてサンドボックス ブランチを作成し、プッシュします:

$ git remote add -f submodule ssh://username@gerrit.wikimedia.org/submodule/name.git $ git checkout -b sandbox/username/merge-submodule submodule/master $ git push --set-upstream origin sandbox/username/merge-submodule

次に、メイン モジュールのクリーン コピーをチェック アウトしたいと思うことでしょう. これには、先ほど作成した個人のサンドボックスが含まれます.

$ git clone ssh://username@gerrit.wikimedia.org:29418/mainmodule/name.git mainmodule $ cd mainmodule $ git review -s

このクリーン コピーでは、下位モジュールの更新は行わないことにご注意ください. では、マージを開始します:

$ git merge -s ours --no-commit remotes/origin/sandbox/username/merge-submodule

次に、下位モジュールのレコードをメイン モジュールから除去する必要があります. 他に下位モジュールがない場合は、簡単なことです:

$ git rm .gitmodules

他の下位モジュールがある場合は、.gitmodules を編集して、この下位モジュール用のスタンザを削除する必要があります:

$ vi .gitmodules $ git add .gitmodules

Then we need to import the revisions from the submodule into the subdirectory formerly used for the submodule. Note that git will interpret this as a rename of all the files from the submodule, so diffs and the output in Gerrit's interface may look a little odd.

$ git read-tree --prefix=submodule/ -u remotes/origin/sandbox/username/merge-submodule

Perform any additional cleanup that may be necessary, for example removing the submodule's .gitreview file, and commit.

$ git rm submodule/.gitreview $ git commit -m "Merge submodule/name into submodule/"

To push to Gerrit, do not use. It will get hopelessly confused. Instead, use the following command:

$ git push gerrit HEAD:refs/for/master

You will need to use the same command again when submitting any revised patch sets for the change.

Note that anyone reviewing this change in an existing local repository that has the submodules checked out (or anyone pulling this change after it is merged) will be prompted to manually remove all the old submodule files from their local  directory, as the new main module files would overwrite them.