2012-04-04 8 views
8

Sí, lo sé. ¿Por qué querrías migrar de Git a SVN?Migración de Git-2-SVN?

Bueno, estoy en una situación en la que tengo que migrar un gran repositorio de Git a Subversion. Aquí hay un flujo de trabajo he intentado por el comentario de Edwin:

primero crear un repo local de SVN: svnadmin create svn_repo

siguiente que echa un vistazo a mi Git repo: git clone git:myNameSpace/myProject

cd en el myProject y ejecutar:

git svn init -s --prefix=svn/ file:///home/myHome/svn_repo/myProject

git svn fetch

git rev-list --parents master | grep '^.\{40\}$' para buscar el hash de la confirmación de inicio de sesión y proporciona solo una confirmación como debería.

siguiente es obtener el hash del tronco vacío comprometen: git rev-parse svn/trunk

Ésta lamentablemente falla con:

fatal: ambiguous argument 'svn/trunk': unknown revision or path not in the working tree. Use '--' to separate paths from revisions

Bueno, no puedo ir mucho después de esto ....

+5

Hay una gran cantidad de comercialización (y algunas buenas razones) para favorecer Git sobre Subversion, pero hay un montón de muy buenas razones para favorecer la subversión sobre Git también. Le viene a la mente un gran manejo de archivos (por una razón). –

+0

Seguro, amo a Git y lo prefiero a Subversion en un abrir y cerrar de ojos ... pero de todos modos necesito hacer esta migración ... –

+0

En realidad, estoy a favor de la subversión sobre git, pero eso tiene más que ver con mi familiaridad y la herramienta experiencia en integración con subversión. Tiene poco que ver con el conjunto de características de git. –

Respuesta

8

Le recomendaría que migre eso con SubGit en varios sencillos pasos.

$ svnadmin create svn.repo 
$ subgit configure svn.repo 
$ nano svn.repo/conf/subgit.conf #edit path to your (bare!) Git repository (you may use "git clone --bare <URL> bare.git.repo" if you don't have it locally) 
$ subgit install 

Eso es todo. Mientras que la traducción SubGit intentará preservar todas las confirmaciones (incluso temporales), ramas, fusiones, ignora, fechas, configuraciones de EOL, etiquetas, etc., como sea posible.

Después de la traducción, los repositorios estarán sincronizados (cada pulsación a Git se traduce a revisión SVN y viceversa). Para romper la sincronización (si no lo necesita) ejecutar

$ subgit uninstall svn.repo 
+1

Tenga en cuenta que SubGit requiere la configuración del lado del servidor (es decir, el archivo 'svn.repo/conf/subgit.conf'), por lo que no sirve de nada si no tiene acceso al servidor en sí. – Siggen

+1

Desde 2.0 uno puede hacer lo mismo con el repositorio remoto usando 'subgit configure --svn-url

'. O alternativamente (una mejor manera, si el gancho pre-revprop-change lo permite) uno puede convertir el repositorio localmente y cargarlo usando 'svnsync' o' svndump + svnrdump'. –

+0

¿SubGit borrará todo el historial de SVN, o solo creará revisiones adicionales basadas en las confirmaciones de git? – igorsantos07

3

--- Editado después de detalles añadidos ---

hizo usted un com inicial vacía mit a svn/trunk? De lo contrario, explicaría por qué recibe un error que no se puede encontrar en el historial.

Los comentarios (en combinación)

The --prefix gives you remote tracking branches like "svn/trunk" which 
is nice because you don't get ambiguous names if you call your local 
branch just "trunk" then. 

y

Then get the hash of the empty trunk commit: 

tiende a implicar que hicieron una svn/trunk se comprometen a prevenir conflictos SVN con un directorio preexistente trunk. Si eso es así, ¿tal vez su único paso en falso es no cometer un svn/trunk que se encontrará más adelante?

--- --- Post original sigue

¿Ha intentado this? dcommit no funcionará correctamente hasta que linealice su historial de troncales (o ramas).

Por favor, publique los detalles de su intento de migración. Si bien lo que publicaste es un mensaje de error útil, sería diez veces más útil con la lista de pasos que usaste para llegar a ese error.

+0

el 'git svn fetch' falla con: W: Ignorando el error de SVN, la ruta probablemente no existir: (160013): el sistema de archivos no tiene ningún elemento: Archivo no encontrado: revisión 1, ruta '/ gentkt' W: no se alarme con el mensaje anterior git-svn solo está buscando agresivamente el historial antiguo. Esto puede llevar un tiempo en repositorios grandes –

+0

y luego el 'git rev-parse svn/trunk' da: svn/trunk fatal: argumento ambiguo 'svn/trunk': revisión desconocida o ruta no en el árbol de trabajo. Use '-' para separar las rutas de las revisiones –

+0

Edwin, actualicé la pregunta publicada y los pasos que había tomado por su enlace. Gracias por la ayuda y, por favor, avíseme si podría hacer más. –