Comment faire partie d'un dépôt GIT un sous-module
j'ai ce dépôt git qui contient deux dossiers: binary-search
et poker
. Par exemple, http://github.com/soulnafein/code-katas
j'aimerais transformer ces dossiers en sous-modules et garder leur historique de changement.
Comment faire?
2 réponses
L'idée générale est d'utiliser ' git filter-branch' et les étapes suivantes:
1) Créez un sous-module en utilisant --subdirectory-filter de filter-branch
(après avoir cloné votre fichier repo).
$ git filter-branch --subdirectory-filter ABC HEAD -- --all
voir ce alors question pour plus sur cette étape.
2) Créer un superproject en utilisant un filtre d'index de filter-branch
pour supprimer le sous-module.
$ git filter-branch --index-filter "git rm -r -f --cached --ignore-unmatch ABC" --prune-empty HEAD
3) confiez le sous-module à la dernière version du superproject.
voir séparer le sous-répertoire en un dépôt git séparé pour un exemple pratique.
chaque sous-module gardera son histoire.
Mais comme il est dit dans cette patch proposition , il serait:
perdre tous les liens historiques entre le superproject et le submodule, cassant des outils comme '
git bisect
", et rendant difficile la récupération de vieux rejets.idéalement, chaque version du superproject nouvellement créé serait liée à la version correcte du sous-module (et tout le .les entrées de gitmodules seraient correctement mises en place, aussi, tout au long de l'histoire du projet)
si vous n'avez pas besoin d'historique lié aux nouveaux sous-modules, vous pouvez suivre les étapes mentionnées ci-dessus.
Mais si vous avez besoin d'une branche à partir d'un point plus ancien tout en ayant des références à vos sous-modules (qui sont actuellement des sous-répertoires simples), vous pouvez envisager d'essayer le script mentionné dans le patch auquel je me réfère. Il est discuté dans ce fil , mais intégré à Git encore, comme Junio C. Hamano dit:
malheureusement, je ne pense pas que nous avons conçu entièrement (ni mis en œuvre du tout) le comportement à vérifier différents points de l'histoire qui ont le même sous-module déplacé autour dans l'arbre superproject.
Aujourd'hui il y a une meilleure façon de le faire: git subtree
voir cette réponse .