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 :
- Git : déménagement d'un dépôt
- Git rebase : pour diviser un commit
- Git submodule
- Git : pour extraire de l'information
- Git bisect : pour trouver l'origine d'une régression
- Git tag : pour nommer des versions
- Git archive : exporter du contenu
- Git : au sujet des pull requests
- Git : les branches
- Git : comment corriger des erreurs
- Git diff : voir les différences
- Git clean : grand nettoyage
- Git : aide mémoire de base
- Afficher un pourcentage dans une page HTML
- VNC : Virtual Network Computing
- Git : déménagement d'un dépôt
- Quelques liens au sujet de l'analyse statique
- Ocaml: mon principal langage de développement
- Disque dur externe
- Les profiles dans Firefox
- Cryptographie et mail sous Android
- Quelques liens au sujet du C
- Git rebase : pour diviser un commit