¿Cómo sincronizar un repositorio GIT con SVN?

3 minutos de lectura

Estoy planeando hacer una bifurcación de un proyecto de código abierto, pero quiero cambiar a GIT. El proyecto usa SVN, pero no hay TRAC disponible, por lo que no puedo simplemente descargar conjuntos de cambios sin tener SVN en mi PC (sin mencionar que svn diff no permite parches binarios).

¿Hay alguna manera de sincronizar mi repositorio maestro GIT con HEAD/tronco de SVN sin mantener otro proyecto en mi HDD?

Puedes sincronizar SVN con Git usando git-svn(1).

Si tiene un repositorio Git existente y desea enlazar con otro repositorio SVN, puede probar algún tipo de vudú, consulte http://blog.experimentalworks.net/2009/07/git-vudú/.

El blog muestra cómo convertir un repositorio Git existente que no es git-svn, a un repositorio Git habilitado para git-svn con un nuevo repositorio SVN remoto creado. Puede modificar un poco el flujo de trabajo de vudú para importar un repositorio SVN existente a su repositorio Git:

  1. Importe el tronco como una rama paralela en su repositorio Git existente

    cd GIT-REPO
    git svn clone --stdlayout SVN-URL .
    
  2. Configure el injerto:

    TRUNK_HEAD=`git rev-parse trunk`
    MASTER_INIT=`git rev-list --reverse master | head -1`
    echo $MASTER_INIT $TRUNK_HEAD >.git/info/grafts
    
  3. Averigüe el rango en la rama maestra que se agregará al tronco, por ejemplo, solo los cambios que comiencen desde la etiqueta v2.0 se agregarán al tronco.

  4. Tronco de rebase

    git checkout master
    git rebase --onto trunk v2.0 master
    
  5. Comprometerse con el tronco

    git svn dcommit
    

Una sugerencia de uso: al usar injertos con git-svn, debe asegurarse de que no dcommit confirmaciones vacías. De lo contrario, dcommit fallará. Para filtrar las confirmaciones vacías, intente

git filter-branch --prune-empty

antes de la primera vez dcommit.

  • Necesito hacer lo contrario: sincronizar GIT con SVN. Me comprometeré con un repositorio GIT.

    – jurchiks

    8 de enero de 2011 a las 11:44

  • Usted puede hacerlo también. He modificado mi respuesta para reflejarlo.

    – Xiè Jìléi

    8 de enero de 2011 a las 11:48

  • Por lo que he leído, dcommit es para confirmaciones de svn, pero no me comprometeré con svn. Por cierto, usaré EGit para Eclipse, no el cliente de la consola.

    – jurchiks

    8 de enero de 2011 a las 12:02

  • Oh. No te comprometerás con el SVN remoto, ¿sí? A continuación, después de git svn clone a su repositorio Git local, puede tratarlo como un repositorio Git normal. No harás nada para dcomprometerte.

    – Xiè Jìléi

    8 de enero de 2011 a las 12:12

  • Entonces deberías mencionar EGit en tu pregunta. También estoy usando EGit para que funcione el icono de estado del nombre de archivo. pero principalmente hago trabajo de git fuera de eclipse. Desafortunadamente, todavía no encontré la función git-svn útil en EGit. Tal vez deberías escribir tu propia extensión.

    – Xiè Jìléi

    8 de enero de 2011 a las 12:30

avatar de usuario
Dmitri Pavlenko

Si tiene acceso a su repositorio SVN, puede instalar SubGit en ello. Solo corre

$ subgit install path/to/your/svn/repostiory

Toda la sincronización se realizará automáticamente (activada por ganchos SVN y Git). En este caso, no solo el maestro/troncal, sino todas las ramas estarán sincronizadas (aunque puede configurar su comportamiento).

Descargo de responsabilidad: Soy uno de los desarrolladores de este producto.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad