Importar directorys SVN separados como twigs git

Quiero convertir un repository SVN existente con un layout no estándar que se ve así:

/ (root) /trunk regular trunk stuff that I would like to make the "master" branch /folder1 files that I would like to make a separate branch "folder1" /folder2 files that I would like to make a separate branch "folder2" /folder3 files that I would like to make a separate branch "folder3" 

… a un repository git, preservando la historia.

La folder1 es que la folder1 , la folder2 y la folder3 no están ramificadas desde algún punto en el trunk ; son un set separado de files, y no están enraizados en algún subdirectory conveniente (que es lo que hace que esta pregunta difiera de esa ).

El layout de la sucursal git deseado se vería así:

 master -----+------(trunk r1)------(trunk r2)----... | folder1 \-----(folder1 r1)----(folder1 r2)---... | folder2 \-----(folder2 r1)----(folder2 r2)---... | folder3 \-----(folder3 r1)----(folder3 r2)---... 

(Esos numbers de revisión no son numbers de revisión svn reales, solo el número de la confirmación en esa carpeta en particular)

Intenté usar git svn pero parece querer que las twigs estén en un único directory, que contiene una subcarpeta por twig. El problema es que, si hago esto, tendría que usar / (el directory raíz) como directory de twigs, lo que haría que trunk una twig separada (mientras que yo quiero usarlo como la twig master ).

Puedes hacer esto especificando múltiples "troncos" para git svn editando tu file .git/config .

Inicializa tu repository de git como siempre:

 git svn init {url-to-repository} -T trunk 

Ahora bien, si edita su file .git/config , encontrará una sección similar a la siguiente:

 [svn-remote "svn"] url = {url-to-repository} fetch = trunk:refs/remotes/trunk 

Simplemente agregue algunas líneas como la siguiente, que agregará cada carpeta como una sola carpeta para ser recuperada (en lugar de una carpeta de twigs o una carpeta de tags para search):

  fetch = folder1:refs/remotes/folder1 fetch = folder2:refs/remotes/folder2 ... 

Me da la printing de que realmente tiene cuatro repositorys separados que desea rastrear en un único repository git con cada repository en su propia sucursal. No exactamente cómo se pretende usar git, pero puedes probar esta configuration de configuration:

 mkdir repo cd repo git init . touch README git add README git commit -m "Initial repository" git checkout -b folder1 mkdir folder1 touch folder1/svn-code-here # Add SVN files to folder1 git add folder1 git commit -m "folder1 branch" git checkout master git checkout -b folder2 mkdir folder2 touch folder2/svn-code-here # Add SVN files to folder2 git add folder2 git commit -m "folder2 branch" git checkout master git checkout -b folder3 mkdir folder3 touch folder3/svn-code-here # Add SVN files to folder3 git add folder3 git commit -m "folder3 branch" git checkout master touch svn-trunk-code-here # Add SVN files to trunk git add svn-trunk-code-here git commit -m "trunk started" 

Esto creará las tres twigs de su carpeta con solo el file README compartido del maestro troncal inicial creado. Esto creará un gráfico de twig como:

Git Branches

En la secuencia de commands anterior, debe replace cada touch svn-code-here con los commands y pasos necesarios para extraer los files SVN en el directory y agregar / comprometerse con Git. Cuando git checkout folder1 ninguno de los directorys de la carpeta y podrá usar el maestro como su troncal y cambiar de twig a las carpetas, según sea necesario, git checkout folder1 .