subgit migrar svn git git-svn

migrar - Mapeo entre los commiters de git y los usuarios de SVN



migrate svn to git (2)

Estoy usando git-svn para almacenar una versión "en etapas" de algún repositorio SVN, donde otros usuarios pueden extraer de este repositorio de puesta en escena y confirmar los cambios en él, luego los compromisos en el repositorio de puesta en escena se confirman periódicamente en el flujo ascendente Repo de SVN.

Quiero saber si hay una forma de mapear entre los nombres de los committers de git y los nombres de usuario de SVN, para que su información se mantenga intacta al comprometerse de nuevo con el repositorio de SVN.


una segunda opción es proporcionar un programa / script que resuelva el mapeo.

¡Muy útil si se desconoce el número de committers pero podría ser "generado" desde el nombre del comisionado SVN!

Si ... el nombre del comisionado SVN no existe en el archivo authors, git svn abortará la operación. El usuario tendrá que agregar la entrada apropiada. Volver a ejecutar el comando git svn anterior después de que se modifique el archivo de autores ...

entonces, para eso tenemos:

--authors-prog=mapMyCompanyUsers.sh

Para no tener que obligar a todos los usuarios a realizar el checkout / curl / wget''the map-Script primero, puede proporcionar algo como esto:

$(tmpMapFile="$TMPDIR/mapSvnUsersAutomatically.$$.sh" && echo -e ''#!/bin/sh/necho $1" <"$1"@example.com>"'' > $tmpMapFile && chmod +x $tmpMapFile && echo $tmpMapFile)

El clon se verá así:

$ git svn clone -s --authors-prog=$(tmpMapFile="$TMPDIR/mapSvnUsersAutomatically.$$.sh" && echo -e ''#!/bin/sh/necho $1" <"$1"@example.com>"'' > $tmpMapFile && chmod +x $tmpMapFile && echo $tmpMapFile) https://svn.example.com/svn/repo/

¡Esto forzará que todas las asignaciones sean exactamente iguales y los clones de SVN podrían ser "compartidos" y fusionados a través de git!


Vincent Danen menciona la opción -A cuando usa git svn :

Así que usar ~ / git como un directorio de alto nivel para repositorios [...] Git crea un archivo authors.txt.
Este archivo asignará los nombres de los committers de Subversion a los autores de Git, lo que dará como resultado un historial correcto del repositorio de Subversion importado.
Para proyectos con un pequeño número de committers, esto es bastante fácil. Para proyectos más grandes con muchos committers, esto puede tomar algo de tiempo. La sintaxis del archivo sería:

user = Joe User <[email protected]> vdanen = Vincent Danen <[email protected]>

El nombre abreviado es el nombre del comitente para Subversion, mientras que la forma larga es el nombre completo y la dirección de correo electrónico del usuario, tal como lo utiliza Git.

El último paso es clonar el repositorio de Subversion, que crea un repositorio local de Git basado en él. Suponiendo que su repositorio usa los estándares de / trunk, / tags, y / branches, use:

# git svn clone --no-metadata -A authors.txt -t tags -b branches -T trunk https://svn.example.com/svn/repo

-A<filename> --authors-file=<filename>

La sintaxis es compatible con el archivo utilizado por git-cvsimport:

loginname = Joe User <[email protected]>

Si se especifica esta opción y git-svn encuentra un nombre de comisionado SVN que no existe en el archivo authors, git-svn abortará la operación.
El usuario tendrá que agregar la entrada apropiada.
Volver a ejecutar el comando git-svn anterior después de que se modifique el archivo de autores debe continuar la operación.

config key: svn.authorsfile

Esto debería funcionar para todos git-svn comandos de git-svn , incluyendo git-svn dcommit (cuando presionas para SVN) (Nota: aunque no lo he probado directamente).

Mohammed Gamal informa (en los comentarios) que está funcionando, pero sin la --no-metadata .