web-dev-qa-db-fra.com

Comment utiliser git-svn pour extraire uniquement le tronc et non les branches et les balises?

Je travaille sur un projet Java legacy qui a 20 modules connectés les uns aux autres. Donc, chaque module a sa propre branche et sa propre balise. La structure est comme ceci:


/projects
   .svn
   - module1
       .svn
       -trunk
       -branch
       -tag
   - module2
       .svn
       -trunk
       -branch
       -tag

Le dossier des projets fait environ 30 Go, ce qui est presque impossible à utiliser git-svn clone pour extraire tous les modules, mais c'est parce qu'il compte toutes les branches et balises.

Est-il possible de cloner uniquement le tronc du projet afin que je puisse commencer à valider localement?

40
toy

Edit: J'ai mal lu la question et répondu à ce que je pensais que vous demandiez, pas à ce que vous avez réellement demandé.

Pour cloner juste le tronc

Le clonage d'un seul répertoire Subversion est facile, et peu importe le répertoire que vous clonez. Ne spécifiez simplement aucun des arguments "layout" et donnez directement le chemin du tronc:

git svn clone http://path.to.svn.repo/module1/trunk

Pour cloner un module spécifique, y compris des balises et des branches, etc.

Un "normal" git svn clone ressemblerait à quelque chose comme ceci:

git svn clone --stdlayout http://path.to.svn.repo/

Ce que vous souhaitez utiliser à la place sera donc:

git svn clone --stdlayout http://path.to.svn.repo/module1/

Cela trouvera les sous-dossiers trunk, branch et tag des module1 dossier, et clonez-les pour vous.

56
me_and

J'ai trouvé que le clone git svn avec --stdlayout n'a pas fait la bonne chose pour moi.

Dans la même situation, cette stratégie a bien fonctionné:

 git svn init --trunk $ repo/projects/module1/trunk --tags $ repo/projects/module1/tag --branches $ repo/projects/module1/branch 
 git svn fetch 
13
Dewey Sasser

Je voulais juste ajouter plus d'informations sur la base de la réponse de @ me_and.

la commande donnée pour cloner juste le tronc va fonctionner mais dans le dossier git la structure créée était:

refs
 |--remotes
    |--git-svn

ce qui équivaut à refs/remotes/git-svn.

si nous le faisons à la place:

git svn clone https://domain/svn/repo/trunk --no-metadata --authors-file=authors.txt --trunk=https://domain/svn/repo/trunk

alors la structure créée est:

refs
 |--remotes
    |--Origin
       |--trunk

ce qui équivaut à refs/remotes/Origin/trunk

La deuxième structure semble plus conviviale et pourrait potentiellement réduire les commandes et les scripts Shell que vous devez écrire :)

P.S. les arguments [--no-metadata] et [--author-file] sont facultatifs.

  • l'option de métadonnées désactive git pour ajouter des informations svn après le message de validation.
  • l'option author-file vous permet de mapper vos contributeurs svn aux contributeurs git afin que vos révisions historiques svn ne soient pas gâchées dans git.
3
stucash