37 votes

Cloner un référentiel Svn non standard avec Git-Svn

Je suis relativement novice en matière de Git, mais je l'ai trouvé si facile à utiliser à la maison que j'aimerais l'utiliser au travail où nos projets sont stockés dans des dépôts Svn. Malheureusement, les dépôts sont légèrement non standard et j'ai du mal à les cloner. Bien sûr, ils ont tous un tronc, des branches/ et des tags/, mais les branches/ et les tags/ ont des sous-répertoires avant d'atteindre l'extension réel les répertoires du projet :

trunk/
branches/maintenance/release1
branches/maintenance/release2
...
branches/development/feature1
branches/development/feature2
...
tags/build/build1
tags/build/build2
...
tags/release/release1
tags/release/release2

Après le clonage :

$ git svn clone -s --prefix=svn/ https://mydomain.com/svnproject
$ git branch -r
  development
  development@1340
  maintenance
  maintenance@1340
  tags/build
  tags/build@1340
  tags/release
  tags/release@1340
  trunk
  trunk@1340 

Je n'obtiens aucune des branches ou des balises du projet. J'ai en fait besoin de pouvoir travailler sur le tronc, une branche de maintenance et une branche de développement. J'ai essayé cette approche en plus de plusieurs bidouillages pour modifier la configuration, mais rien ne fonctionne pour moi.

Existe-t-il un moyen de rassembler les principaux composants de mon projet Svn non standard dans un dépôt git local afin de pouvoir facilement passer de l'un à l'autre ?

Merci beaucoup.

MISE À JOUR : je dois ajouter que je ne peux pas (encore) effectuer un passage complet à Git. Il y a d'autres membres de l'équipe impliqués et une présence internationale. La logistique de la transition est plus que ce que je suis prêt à entreprendre jusqu'à ce que je sois beaucoup plus à l'aise avec Git ; comme je l'ai mentionné, je suis encore assez nouveau. Je n'ai qu'effleuré la surface de ses capacités.

38voto

Rob Wilkerson Points 12220

Lee B avait raison. La réponse, fournie par doener dans #git, est de mettre à jour Git vers 1.6.x (j'utilisais 1.5.x). La version 1.6.x offre un clonage profond, de sorte que plusieurs caractères génériques peuvent être utilisés avec la balise --branches option :

$ git svn clone https://svn.myrepos.com/myproject web-self-serve \ 
          --trunk=trunk --branches=branches/*/* --prefix=svn/
$ git branch -r
  svn/development/sandbox1
  svn/development/feature1
  svn/development/sandbox2
  svn/development/sandbox3
  svn/development/model-associations
  svn/maintenance/version1.0.0
  svn/trunk

Exactement ce dont j'avais besoin. Merci pour la perspicacité, tous.

13voto

VonC Points 414372

Pourriez-vous essayer svn2git de nirvdrum (semble le plus à jour) afin d'importer votre svn dans un dépôt git ?
(Début 2009, Paul a mentionné ceci svn2git d'iteman en remplacement de ce original de jcoglan'svn2git qui était, comme son auteur l'a mentionné : "un hack rapide pour sortir mon code de Subversion ")

C'est mieux que git svn clone parce que si vous avez ce code dans svn :

  trunk
    ...
  branches
    1.x
    2.x
  tags
    1.0.0
    1.0.1
    1.0.2
    1.1.0
    2.0.0

git-svn va parcourir l'historique des livraisons pour construire un nouveau dépôt git.
Il importera toutes les branches et les balises comme des branches svn distantes, alors que ce que vous voulez vraiment, ce sont des branches locales et des objets balises git natifs. .
Donc après avoir importé ce projet, vous obtiendrez :

  $ git branch
  * master
  $ git branch -a
  * master
    1.x
    2.x
    tags/1.0.0
    tags/1.0.1
    tags/1.0.2
    tags/1.1.0
    tags/2.0.0
    trunk
  $ git tag -l
  [ empty ]

Après que svn2git ait terminé votre projet, vous obtiendrez ceci à la place :

  $ git branch
  * master
    1.x
    2.x
  $ git tag -l
    1.0.0
    1.0.1
    1.0.2
    1.1.0
    2.0.0

Bien entendu, cette solution n'est pas conçue comme un aller simple.

Vous pouvez toujours revenir à votre dépôt svn, avec... git2svn (également présents sur place )

L'idée demeure :

  • SVN au travail comme dépôt central.

  • Git "ailleurs" pour expérimenter rapidement parmi plusieurs branches privées de Git.

  • Importation a seulement consolidé les branches Git en branches SVN officielles.

9voto

joshwa Points 621

Pour les dispositions de repo qui ne sont pas servies par des jokers simples : (de ma réponse a cette question connexe )

El Page de manuel actuelle de git-svn dit :

Il est également possible de récupérer un sous-ensemble de branches ou de balises en utilisant une liste de noms séparés par des virgules entre entre 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/*

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X