2010-10-22 14 views
4

J'ai un projet en SVN que je migre vers Git. Le projet consiste en un produit «de base» (sous le tronc), qui est ensuite ramifié dans le même référentiel et utilisé comme point de départ pour personnaliser pour chaque client individuel à qui nous faisons rouler le produit. Il me semble que ce ne sont pas de vraies branches car elles ne seront jamais fusionnées dans le coffre, et il vaudrait mieux vivre dans leurs propres dépôts avec leur historique les reliant au dépôt "trunk" et la capacité de tirer des changements du tronc lorsque cela est nécessaire (facilement accompli avec git bien sûr). Ce qui complique un peu les choses, c'est qu'un client a une branche de son propre projet, qui est une branche "réelle" en ce sens qu'elle sera fusionnée sur la branche principale de ce client à un moment donné.Diviser un référentiel Git en plusieurs branches devient des fourches

Pour nous espérons rendre les choses plus claires, la structure SVN est la suivante:

  • "Projet" référentiel
    • Tronc
    • Branches
      • Client1 (ramifié de V100 Trunk)
      • Client2 (dérivée de Trunk v150)
      • Client2-Branch (bran ched Client2 V200)
      • client3 (ramifié de tronc V150)

Et la structure que je voudrais aller est

  • "Projet" référentiel

  • Référentiel Client1 (issu de SHA123)

  • Client2 Repository (fourchue de SHA456)

    • Client2-Branche (ramifié de SHA456789)
  • client3 Repository (fourchue de SHA789)

Quelqu'un peut-il recommander un bon façon de le faire - je ne suis pas un débutant Git et je suis conscient de la branche de filtre, je ne suis pas sûr de la méthode que je devrais prendre pour obtenir cette structure et garder autant d'histoire que possible.

Merci

Répondre

3

Si vous voulez vraiment faire, clone le repo, et supprimer les branches étrangères dans chaque.

Mais la situation actuelle semble très bien. Êtes-vous sûr de ne jamais vouloir choisir des correctifs d'un rapport à un autre?

+0

Assez sûr - nous serions toujours en train de passer par ce qui est maintenant le tronc – spmason

+2

@Steve: Je ne pense pas que vous avez répondu exactement wnoise là. Si tout le travail passe toujours par ce que vous avez appelé le tronc, alors vous voulez absolument au moins un repo où ces branches existent toutes, ainsi vous pouvez faire des choses comme fusionner le travail commun du tronc dans tous les clients. De toute façon, créez des clones distincts pour chacun d'entre eux, mais il n'y a aucune raison pour que chaque client ne soit au moins conscient du "tronc", et aucune raison pour que le tronc ne soit pas conscient de tous les clients. Mais wnoise a raison: tout ce que vous demandez, c'est de cloner et de supprimer quelques branches. – Cascabel

+0

Mais j'ai besoin des branches que j'ai créées pour être le maître/tronc des nouveaux dépôts. Je suppose que c'est juste une fusion et supprimer la branche originale cependant? – spmason

1

Vous pouvez utiliser svn2git pour cloner les branches dans leurs propres prises en pension, quelque chose comme

svn2git svn://project/branches/client1 --rootistrunk 

pour chaque branche que vous voulez faire dans un repo en forme de fourche, puis

svn2git svn://project/trunk --rootistrunk 

pour la tronc. J'ai fait quelque chose de similaire pour une très grande conversion svn-> git.