2009-11-02 5 views
58

J'ai un dossier dans mon référentiel Git que je voudrais déplacer dans son propre référentiel. Est-il possible de déplacer l'historique de ce dossier avec le dossier?Exporter sous-arbre dans Git avec l'historique

Je faisais auparavant juste un git rm -r --cached subfolder/ puis git init sur le sous-dossier. Toutefois, l'historique n'est pas importé dans le nouveau référentiel.

+2

similaires ou en double de: http://stackoverflow.com/questions/811251/how-can-i-move-a-single-directory-from-a-git-repository-to-a- new-repository-whil ​​ –

+0

Copie possible de [Comment puis-je déplacer un seul répertoire d'un référentiel git vers un nouveau référentiel tout en conservant l'historique?] (http://stackoverflow.com/questions/811251/how-can-i- move-a-single-directory-from-a-git-repository-to-a-new-repository-whil) – user

Répondre

84

Citant un exemple de git-filter-branch(1)

Pour réécrire le référentiel pour regarder comme si foodir/a été la racine du projet, et de rejeter tout autre histoire:

git filter-branch --subdirectory-filter foodir -- --all 

Ainsi vous peut, par exemple, transformer un sous-répertoire de bibliothèque en un référentiel propre. Notez le - qui sépare les options de la branche du filtre des options de révision, et --all pour réécrire toutes les branches et les balises.

+42

Assurez-vous de l'exécuter sur un clone du dépôt d'origine, car il efface le reste du dépôt. – bobDevil

+0

Incroyable! Je ne pouvais pas comprendre cette option sans un exemple de travail. Merci! – matpie

+0

Aussi, merci à @bobDevil pour les heads up. J'ai poussé tous mes changements vers ma télécommande/avant/essayant ceci, ainsi je serais sûr si elle a effacé mon repo; mais ce serait certainement inattendu. – matpie