2009-10-28 4 views
20

Notre société subversion repo est un peu difficile: Nous avons une configuration de base "par défaut" avec trunk, tags et branches. Cependant, à l'intérieur des branches, nous avons un répertoire "travail" qui contient plus de branches. Quelque chose comme ceci:Git-SVN avec plusieurs succursales?

  • branches/release_1_0_x
  • branches/release_1_1_x
  • branches/travail/dave/topic_one
  • branches/travail/tom/topic_two
  • branches/travail/something_else

Maintenant, comment puis-je faire en sorte que git-svn reconnaisse toutes ces branches (et quelques autres) comme des branches séparées? Il semble git svn init accepte seulement un emplacement de branche, comment je l'invoque.

Modifier: voilà comment j'initialisés le git:

git svn clone -s --prefix=svn/ http://svn.company.com/product/ 

Répondre

9

Selon la réponse à another question, votre meilleur pari est d'utiliser Git 1.6.x et tirer profit du « clonage profond ».

Si vous ne pouvez pas mettre à niveau vers la version 1.6.x, vous pouvez spécifier plusieurs branches lorsque vous clonez.

git svn clone -s --prefix=svn/ -b branches -b branches/work/dave -b branches/work/tom ... 

Vous aurez juste à vous assurer que vous ajouter des informations pour les nouveaux utilisateurs à votre .git/config avant ing « fetch git svn » quand une nouvelle branche de l'utilisateur a été ajouté.

+0

C'est en effet exactement ce dont j'ai besoin. Merci pour le lien! –

+4

à quoi ressemble votre fichier .git/config, puisque j'utilise git 1.7 et que je voudrais le faire rétroactivement? – whaley

+0

J'ai essayé cela, mais il a aussi une branche appelée "travail". Y a-t-il un moyen de faire en sorte que le "travail" ne soit pas sa propre branche mais que "work/something_else" soit? Peut-être avec --ignore-paths? –

11

Pour ceux qui cherchent à le faire de façon rétroactive, l'git-svn manpage for 1.7.x dit:

Il est également possible de récupérer un sous-ensemble de branches ou de balises en utilisant une liste séparée par des virgules des noms dans les accolades. Par exemple:

[svn-remote "huge-project"] 
    url = http://server.org/svn 
    fetch = trunk/src:refs/remotes/trunk 
    branches = branches/{red,green}/src:refs/remotes/branches/* 
    tags = tags/{1.0,2.0}/src:refs/remotes/tags/* 
+0

Merci! Dans mon cas, je ne pouvais pas l'obtenir pour cloner comme ça, mais j'ai cloné, édité .git/config pour ajouter les branches comme indiqué et redériver 'git svn fetch'. Maintenant 'git branch -a' ou' git branch -r' montre les branches - woot! – sage

28

Vous pouvez ajouter plusieurs branches et balises entrées dans votre config git-svn, même avec effet rétroactif. Donc, si normalement les branches SVN vivent dans branches/* dans votre repo SVN (.-À-dire une mise en page standard), mais vous avez aussi branches/summer-students/*, vous pouvez le configurer dans .git/config comme ci-dessous:

[svn-remote "svn"] 
    url = svn+ssh://svn.example.com 
    fetch = trunk:refs/remotes/trunk 
    branches = branches/*:refs/remotes/* 
    tags = tags/*:refs/remotes/tags/* 

    branches = branches/summer-students/*:refs/remotes/svn-summer-students/* 

A gauche du : est le chemin dans le Repo SVN, et sur la droite est le chemin qu'il apparaîtra comme dans votre liste de branches distantes git. Vous pouvez utiliser refs/remotes/* à plusieurs reprises pour que tout apparaisse comme une branche distante de niveau supérieur, mais attention aux collisions de noms - ils vont casser des choses (d'où svn-summer-students au lieu de summer-students, qui existe déjà). Après avoir édité la configuration, vous devez supprimer .git/svn/.metadata et exécuter git svn fetch pour actualiser la liste des branches et la régénérer. git branch -r devrait alors montrer les branches supplémentaires. Si vous avez des erreurs, cherchez des collisions de noms.

Les git svn docs ont d'autres exemples de spécification de chemins via des jokers ou des expressions si vous avez une disposition SVN funky.

+0

une bouée de sauvetage qui m'a sauvé 4 jours de fetch! – prusswan

+0

Belle explication, fonctionne comme un charme! –

Questions connexes