Gerrit/Sous-module merge
Si vous souhaitez fusionner un sous-module dans le projet parent dans Gerrit (c'est-à-dire lorsqu'il n'est pas logique de les séparer), suivez ce processus. Notez que vous aurez besoin des droits Gerrit pour pousser les commit de fusion afin de pouvoir pousser avec succès la fusion dans Gerrit.
Tout d'abord, vous devez obtenir les versions du sous-module dans le dépôt du module principal, sinon Gerrit va essayer de les interpréter comme de nouvelles modifications lorsque vous allez essayer de pousser votre arbre fusionné. La manière la plus facile probablement de faire cela est de créer un bac à sable personnel contenant ces versions. Pour faire cela, ajoutez un distant au sous-module dans votre dépôt local, puis créez et poussez la branche du bac à sable basée sur cela :
$ 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
Ensuite, vous voudrez peut être extraire une copie du module principal. Cela va inclure le bac à sable personnel que vous venez de créer.
$ git clone ssh://username@gerrit.wikimedia.org:29418/mainmodule/name.git mainmodule $ cd mainmodule $ git review -s
Notez que nous ne mettons pas à jour les sous-modules dans cette copie propre. Commencer maintenant à fusionner :
$ git merge -s ours --no-commit remotes/origin/sandbox/username/merge-submodule
Ensuite il nous faut supprimer l'enregistrement du sous-module du module principal. S'il n'y a pas d'autres sous-modules, c'est assez simple :
$ git rm .gitmodules
S'il y a d'autres sous-modules, vous devrez modifier .gitmodules pour supprimer la section pour de ce sous-module :
$ vi .gitmodules
$ git add .gitmodules
Ensuite, nous devons importer les versions du sous-module dans le sous-répertoire utilisé précédemment pour le sous-module. Notez que Git interprétera cela comme un renommage de tous les fichiers du sous-module, donc les diffs et les sorties de l'interface Gerrit pourront sembler un peu étranges.
$ git read-tree --prefix=submodule/ -u remotes/origin/sandbox/username/merge-submodule
Réaliser tout nettoyage supplémentaire qui serait nécessaire, par exemple en supprimant le fichier .gitreview du sous-module, puis valider.
$ git rm submodule/.gitreview $ git commit -m "Merge submodule/name into submodule/"
Pour pousser dans Gerrit, n'utilisez pas git review
.
Il ne s'y retrouvera pas.
A la place, utilisez la commande suivante :
$ git push gerrit HEAD:refs/for/master
Vous devrez utiliser la même commande à nouveau lorsque vous soumettrez des ensembles de corrections relus pour la modification.
Notez que toute personne qui examine cette modification dans un dépôt local existant et possédant les sous-modules vérifiés (ou toute personne qui extrait cette modification après la fusion) sera invitée à supprimer manuellement tous les fichiers des anciens sous-modules dans leur répertoire local submodule/
, car les nouveaux fichiers principaux de module viendront les remplacer.