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.

Partager cet article

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *