subversion migrar git svn git-svn

migrar de subversion a git



git svn especifica ramas y etiquetas en un diseño de repositorio svn no estándar (2)

El diseño es:

Branches/ Project1/ Branch11/ ... Branch1N/ Project2/ Branch21/ ProjectX/ # not anywhere else Excluded1/ Excluded2/ Excluded3/ Excluded4/ Programs/ Excluded11/ ... Excluded1N/ Project1/ # the main one Project2/ ... ProjectN/ Tags/ Project1/ Release1/ ... Release69/

Excluido logré excluir, pero no puedo entender cómo puedo mapear ramas / etiquetas a git branches / tags, preferiblemente después del hecho (cada clon tarda ~ 5 horas).

Tenga en cuenta que soy nuevo en SVN: no sé ni entiendo el sistema de bifurcación / etiquetado.

Estoy en windoz - svn2git no es una opción (de todos modos, estoy interesado en cómo hago esto después del clon o, peor aún, en la clonación, pero solo con vanit git)
Además, no pretendo que sea una migración permanente, funcionará como un puente entre el SVN y el nuevo git repo utilizado en el desarrollo, así que quiero conservar la mayor cantidad de información posible, pero no más de lo necesario. En algún momento, podría convertirse en permanente, donde luego tendré que filtrar confirmaciones vacías (a los proyectos excluidos), supongo (?)

Repo

Comando:

$ git svn clone --ignore-paths = "^ (?: Lanzamientos | Proyectos | Scripts | Juegos |) / | ^ Programas / (?: Nif Scanner | Nif Viewer | Raziel23x''s Oblivion Toolset | Shader Disasm | Shader Editor) /" --authors-file = authors_with_emails.txt svn: //svn.code.sf.net/p/oblivionworks/code/.

Después del clon tengo:

$ git branch -r git-svn $ git branch * master


Recapitulación : he clonado lo que excluía lo que quería excluir, ahora quiero decir a git "crear una rama git para cada una de esas ramas svn", una verdadera rama git que calcula los deltas y los comprime y elimina la carpeta Branches - y rastrearlos, y este directorio de etiquetas (700 mb) son solo etiquetas, ¿qué podrías hacer al respecto? no corresponden a confirmaciones)? "
No veo mal el maletero

Mi config :

[core] repositoryformatversion = 0 filemode = false bare = false logallrefupdates = true symlinks = false ignorecase = true hideDotFiles = dotGitOnly [svn-remote "svn"] ignore-paths = ^(?:Releases|Projects|Scripts|Games|)/|^Programs/(?:Nif Scanner|Nif Viewer|Raziel23x''s Oblivion Toolset|Shader Disasm|Shader Editor)/ url = svn://svn.code.sf.net/p/oblivionworks/code fetch = :refs/remotes/git-svn [svn] authorsfile = authors_with_emails.txt [gui] wmstate = zoomed geometry = 787x377+54+59 305 1127 [remote "github"] url = https://github.com/Utumno/wrye_bash_refactoring.git fetch = +refs/heads/*:refs/remotes/github/* [branch "master"] remote = github merge = refs/heads/master


Hice algo como esto recientemente.

Antes que nada, no estoy seguro de por qué quieres reorganizar todo después de mudarte de svn a git. Dudo que eso sea posible.

En segundo lugar, no soñaría con hacer esto sin svn2git. No estoy seguro de a qué se refiere el problema de Windows: svn2git está escrito en Ruby. No uso Windows si puedo evitarlo, pero seguramente hay una implementación de Ruby para Windows, a través de Cygwin, nada más.

En tercer lugar, y esta era la clave, utilicé svndumpfilter para obtener el repositorio svn justo como yo quería (es decir, en una forma que svn2git consumiría felizmente) antes de convertir. Esto tomó un poco de prueba y error, pero funcionó muy bien al final.

Consulte http://svnbook.red-bean.com/en/1.7/svn.reposadmin.maint.html#svn.reposadmin.maint.migrate y http://svnbook.red-bean.com/en/1.7/svn .reposadmin.maint.html # svn.reposadmin.maint.filtering (ajuste los enlaces para su versión de SVN) para obtener más información.

EDITAR: Habría hecho un comentario, pero es demasiado largo. Creo que lo mejor que podrás hacer es algo como esto:

[svn-remote "svn"] ignore-paths = ^(?:Releases|Projects|Scripts|Games|)/|^Programs/(?:Nif Scanner|Nif Viewer|Raziel23x''s Oblivion Toolset|Shader Disasm|Shader Editor)/ url = svn://svn.code.sf.net/p/oblivionworks/code fetch = Programs/Wrye Bash:refs/remotes/git-svn/Wrye Bash branches = Branches/Wrye Bash/*:refs/remotes/git-svn/Wrye Bash/branches/* fetch = Programs/Skyrim Viewer:refs/remotes/git-svn/Skyrim Viewer fetch = Programs/CBash:refs/remotes/git-svn/CBash branches = Branches/CBash/*:refs/remotes/git-svn/CBash/branches/* # etc.

Es decir, una fetch y, si corresponde, una línea de branches para cada programa que le interese. Al igual que en la respuesta a la que se vinculó, debe purgar el archivo .git/svn/.metadata antes de hacer git svn fetch nuevo.

Pero esto no afecta mi comentario anterior: sigue siendo cierto que su historial de git es completamente lineal y no refleja el historial real de bifurcaciones y fusiones de su proyecto. Esto no será lo que quieras si haces de esto una migración permanente.


Para ramas:

En tu archivo de configuración de git puedes controlar dónde se encuentran las ramas de svn:

[svn-remote "svn"] url = file:///some.url.to/svn/dir fetch = trunk:refs/remotes/trunk branches = Branches/*/*:refs/remotes/*

Entonces puede configurar las diferentes referencias a las ramas.

OK para que pueda hacer lo mismo con las etiquetas, porque en svn, las etiquetas y las ramas son muy similares.

branches = Tags/*:refs/remotes/*

Pero si quieres etiquetas git "reales", no hay problema, una vez que las hagas referenciar como sucursales, puedes modificar tu git repo nuevamente para hacer buenas referencias a etiquetas git:

git-for-each-ref refs/remotes/origin/tags | cut -d / -f 5- | while read ref do git tag -a "$ref" -m"say farewell to SVN" "refs/remotes/origin/tags/$ref" git push origin ":refs/heads/tags/$ref" git push origin tag "$ref" done

Obviamente, necesitará modificar ligeramente estos scripts para sus propósitos.