Supprimer un submodule git
Si comme moi vous souhaitez faire évoluer un sous-projet ( plugin WordPress, etc ) depuis votre projet en cours, vous avez probablement utilisé les submodules git.
Au moment de faire la passation du projet, le client peut souhaiter tracker ces dépendances pour être indépendant de votre repository parent, ou tout simplement vous utilisez un repository privé dont vous allez retirer les droits.
Pour supprimer un submodule, j’utilise cette fonction, collée par exemple dans votre dotfiles ou votre .bash_profile
:
function gitrmsubmodule () { if [[ "${1: -1}" == '/' ]];then echo "- Submodule path should not end with a '/'."; return 0; fi; if [[ -z "${1}" ]]; then echo "- Missing argument ! You should specify a submodule folder."; return 0; fi; if [[ ! -d "${1}" ]]; then echo "- The module ${1} does not exists"; return 0; fi; git config -f .gitmodules --remove-section submodule.${1}; git config -f .git/config --remove-section submodule.${1}; git add .gitmodules; git rm --cached ${1}; rm -rf .git/modules/${1}; git commit -m "Git - Remove submodule ${1}"; }
Il vous suffit ensuite de trouver le chemin du submodule présent dans votre fichier .gitmodules. Exemple :
[submodule "wp-content/plugins/wpusimplepwa"] path = wp-content/plugins/wpusimplepwa url = https://github.com/WordPressUtilities/wpusimplepwa.git
Ensuite, plus qu’à appeler la fonction depuis la racine du thème, avec le chemin sans slash ( / ) à la fin.
gitrmsubmodule wp-content/plugins/wpusimplepwa;
Le submodule sera retiré de votre projet, un commit contenant la suppression du submodule sera généré, et il vous restera les fichiers contenus, prêts à être commités à nouveau si besoin.