2010-10-06 24 views
1

Pour mes projets scolaires, j'avais l'habitude d'avoir un grand dépôt avec plusieurs sous-répertoires pour les projets spécifiques. Parce que je n'avais pas le temps, j'ai toujours engagé quelque chose dans la branche master. Le problème est que cela s'avère impossible, car il devient de plus en plus difficile de revenir à des commits plus anciens ou de déterminer quel commit appartient à quoi sans lire le message.Comment scinder commet automatiquement dans différentes branches?

il ressemble actuellement à ceci:

Dir-tree:

projects/ 
    projectA/ 
    projectB/ 
    projectC/ 
    ... 

repo:

A---B---C---D---E---F---G<master> 

J'ai découvert que commettras presque tous (à l'exception d'environ cinq ans, que je peut corriger à la main) il suffit de modifier les fichiers dans l'un de ces dossiers.

Y a-t-il un moyen facile (automatisé?) (Script?) Qui fait le douloureux travail d'assigner automatiquement les validations aux projets et de créer des branches différentes? Je veux avoir quelque chose comme ça à la fin:

repo:

A---C---G<project A> 
|\ 
| \ 
| \ 
| B---D<project B> 
E---F<project C> 

Répondre

1

Vous cherchez git filter-branch en utilisant l'option --subdirectory-filter. Création de trois branches pour les trois projets que vous voulez, puis en cours d'exécution git filter-branch --subdirectory-filter projectX dans ces branches devrait vous donner le résultat souhaité.

Vous pouvez également envisager d'utiliser un référentiel par projet. Une fois que vous avez fait ce qui précède, la création de nouveaux dépôts, chacun contenant l'une des branches que vous avez créées précédemment en tant que maître, sera triviale.

+0

Pouvez-vous expliquer à un utilisateur inexpérimenté comment faire le fractionnement dans différents repos détaillés? – fuz

+0

Pour une réponse plus élaborée, n'hésitez pas à poser une nouvelle question, mais l'idée de base est de simplement créer, disons, 3 nouveaux dépôts en utilisant 'git init', récupérant tous les objets du référentiel contenant les branches pour chaque répertoire, puis en définissant le maître de chacun des nouveaux dépôts sur ce qui se trouvait dans la branche correspondante. Après cela, vous pouvez supprimer les autres branches dans les dépôts par projet et peut-être également demander à git de supprimer tous les objets référençant les validations vers d'autres projets, qui sont désormais inaccessibles depuis le maître du nouveau dépôt. – rafl