Comment extraire un répertoire Git dans un autre dépôt ?
Lorsque l’on développe, nous sommes amenés à créer divers composants techniques et/ou fonctionnels afin de découper notre architecture applicative. Parfois, ces composants peuvent être utiles dans d’autres bases de code et il est alors intéressant de les extraire afin de pouvoir les réutiliser plus facilement.
Il est alors possible de créer un nouveau dépôt et de copier le ou les dossiers contenant le code du composant en question. Néanmoins, cette méthode simple présente un énorme inconvénient : le journal de commit. Effectivement, en effectuant une simple copie des fichiers, nous perdons l’historique des commits Git et donc l’historique du composant.
Heureusement Git possède tous les outils nous permettant de réaliser cette
opération d’extraction tout en conservant notre historique de travail avec la
commande filter-branch
.
Note: pour les utilisateurs faisant ces opérations sous Windows, il est important de noter qu'il faut utiliser le séparateur *nix ('/') pour les dossiers. Sans quoi les commandes ne seront pas exécutées avec succès.
La commande filter-branch
permet de réécrire l’historique Git en appliquant des
filtres personnalisés. Les filtres peuvent permettre la réécrire des commits,
des branches (en incluant les informations de merge), …
Pour extraire notre composant, nous allons commencer par cloner le dépôt dans le répertoire qui contiendra notre composant :
Puis nous allons extraire les fichiers du dossier qui nous intéresse :
Et voilà, notre nouveau dépôt ne contient que les fichiers que nous souhaitions extraire. Il ne reste plus qu’à supprimer définir le nouveau remote de notre composant :