Git subtree : créer un nouveau dépôt à partir du répertoire d'un autre dépôt

Anne git

Suppose que, dans un dépôt, on s’aperçoive qu’un répertoire n’a rien à faire là, et qu’il devrait avoir son propre dépôt pour lui tout seul.

  • préparer la branche dans l’ancien dépôt :
cd ~/vieux_projet
git subtree split -P dir/a/couper -b nouveau_nom_de_branche

Le nouveau_nom_de_branche n’a pas trop d’importance car il va disparaitre au bout du compte. Attention par contre à de rien mettre devant dir et derrière couper (pas de / supplémentaire ou autre)

  • créer un nouveau dépôt vide nouveau_projet et le cloner ;

  • récupérer le sous-arbre:

cd ~/nouveau_projet
git pull ~/vieux_projet nouveau_nom_de_branche
  • transférer :

      $ git push origin -u master
    
  • nettoyer l’ancien projet :

$ cd ~/vieux_projet
$ git branch -d nouveau_nom_de_branche
$ git rm -rf dir/a/couper

Ça marche très bien même si le répertoire à couper n'était pas encore dans la branche master de vieux_projet.

Pour nettoyer aussi l’historique, on peut utiliser git filter-branch mais je n’ai pas essayé.

Merci à cette réponse sur Stackoverflow qui m’a bien aidée, et qui contient d’autres informations utiles.

Voir aussi :