2009-10-12 7 views
3

J'ai actuellement un dépôt git que j'ai importé de svn il y a un certain temps l'école. Dans ce dépôt scolaire, j'ai un dossier pour chacune de mes classes.fractionnement d'un dépôt git

Je ne peux pas sembler comment prendre ce référentiel unique et le diviser en référentiel pour chaque classe sans perdre l'historique entier de la classe, ce que je préférerais ne pas faire.

Suggestions?

Répondre

5

git filter-branch est le chemin à parcourir. Faites une copie de la prise en pension pour chaque sous-répertoire, puis dans chaque copie d'exécuter une ligne comme celui-ci remplaçant « myclassname » avec votre nom de classe réelle:

git filter-branch --subdirectory-filter myclassname -- --all 
+2

Cela a fonctionné magnifiquement merci. Je l'ai transformé en un script shell que vous pouvez voir ici: http://github.com/icco/git-explode – icco

+0

Nice, heureux que j'ai aidé :-) – richq

+0

Il est épelé "séparé". –

-1

Exécutez la commande suivante

git log -u <path> 

Cela vous donnera une liste des changesets (y compris diff) pour chaque changeset dans le dossier spécifié. À partir de là, vous pouvez écrire un script pour analyser cette sortie de git log et exécuter chaque correctif sur un nouveau référentiel, en conservant les changesets et les informations sur l'auteur.

Bit d'un hack, mais cela va fonctionner.

+0

Il doit y avoir une meilleure façon de le faire que cela. J'ai cinq ans de commits ... – icco

Questions connexes