¿Cómo puedo clonar un repository SVN donde todas las twigs están ubicadas en la raíz?

Mi estructura SVN es así:

/ |-- Branch1 |-- Branch2 |-- Branch3 ... 

¿Cómo puedo clonar esto en un repository git preservando las twigs (es decir, no el historial plano)?

Pregunta adicional: ¿Cómo clonar solo un subset de las twigs SVN en un nuevo repository git?

Creo que en SVN las sucursales son solo carpetas, es solo una convención. Git en realidad trabaja con twigs. Con esto, el enfoque se vuelve más fácil.

Como necesita recuperar los datos del repository SVN, necesitará crear un control remoto para él. De la estructura veo que necesitas crear la Rama 1 a 3 en tu repository de git.

Crear el repository de Git.

 git init git config --local --add user.name <Username> git config --local --add user.email <email> echo "MASTER" > master git add master git commit -m "Dummy commit" 

Cree el control remoto de su twig SVN.

 git config --add svn-remote.<BranchName>.url <SVN URL> git config --add svn-remote.<BranchName>.fetch :refs/remotes/<RemoteName> 

para Branch1:

 git config --add svn-remote.branch1.url https://svnhost/svn/MyRepo/Branch1 git config --add svn-remote.branch1.fetch :refs/remotes/branch1_remote 

Obtener datos SVN de branch1:

 git svn fetch branch1 

Repita esto para otras dos twigs Branch2 y Branch3.

Puede detenerse aquí si solo está intentando clonar. No necesita avanzar más a less que desee trabajar con el repository de Git. Google en el subtree de git para saber por qué esta podría ser la solución correcta en su caso.

Para crear Subtree:

 Find last commit id: git checkout remotes/branch1_remote git svn log -n 1 --show-commit --oneline Output: 734713bc047d87bf7eac9674765ae793478c50d3 (This is yout LastCommitId value) Create subtree in mainline master branch: git checkout master git subtree add --prefix=Branch1 <LastCommitId> 

Para ti, pregunta extra: testing esto

 git svn clone https://svnhost/svn/MyRepo/Branch2 

Este es simple, la otra forma es seguir los pasos anteriores y en lugar de crear tres controles remotos en el mismo repository, cree un nuevo repository cada vez y luego agregue el control remoto de su twig. Según su requerimiento, puede search en Google de diferentes maneras.

Clona solo las primeras revisiones del único tronco antes de que se creen las twigs. Supongo que sus twigs no fueron creadas antes de la revisión 5. También estoy asumiendo que su carpeta troncal se denomina trunk . Ajustar en consecuencia. Espero que ya hayas creado un file de autores también. Esto configurará el repository local.

 $ git svn clone https://svn.example.com/myrepo --authors-file=authors.txt -T trunk -r 1:5 myrepo 

A continuación, agregue líneas de branches en myrepo/.git/config similar a esto:

 [svn-remote "svn"] url = https://svn.example.com/myrepo fetch = trunk:refs/remotes/origin/trunk branches = branches/Branch1:refs/remotes/origin/* branches = branches/Branch2:refs/remotes/origin/* branches = branches/Branch3:refs/remotes/origin/* 

Si sus twigs siguen una convención de nomenclatura que puede combinarse con un patrón como en su ejemplo, puede hacer esto:

 [svn-remote "svn"] url = https://svn.example.com/myrepo fetch = trunk:refs/remotes/origin/trunk branches = branches/Branch*:refs/remotes/origin/* 

Algunas personas recomiendan eliminar myrepo/.git/svn/.metadata después de realizar estas ediciones. No sé si eso es necesario o no.

Ahora solo busca las revisiones restantes. Git svn resolverá la estructura de la sucursal y hará lo correcto. Se ignorarán las twigs que no coincidan con una de las líneas de las branches .

 $ cd myrepo $ git svn fetch 

Una vez que esté completo, puede verificar que las twigs se hayan creado con este command.

 $ git branch -r origin/Branch1 origin/Branch2 origin/Branch3 origin/trunk