Pregunta

Tengo mis proyectos en 2 repositorios. Uno bajo SVN y otro bajo Git. Cada vez que cambio algo en SVN quiero hacer lo mismo en el repositorio de Git.

Digamos que realizo un cambio en el repositorio SVN, produciendo la revisión 125. ¿Cómo aplicaría estos mismos cambios a mi repositorio Git (suponiendo que mi repositorio Git esté actualizado con la revisión 124).

Gracias.

¿Fue útil?

Solución

Lo que realmente hice / busqué fue:

cd /path/to/svn/repo
svn diff -r 125 > /tmp/patch.diff
cd /path/to/git/repo
patch -p0 < /tmp/patch.diff

Otros consejos

Prueba:

svn diff | patch -d /path/to/git/repo -p0

Consulte svn help diff si desea exportar el diff de una revisión específica.

¿Por qué a nadie le gusta git-svn? No puedo asumir que nadie lo sabe.

Hay git-svn (y git-hg y git-cvs y git-bzr afaict). Al menos con git-svn simplemente puedes hacer

git svn clone --stdlayout http://myrepo/root here

using -s ( --stdlayout ) asume troncal / ramas / etiquetas / diseño estándar, pero puede tenerlo de cualquier manera ( man git-svn ).

El mapeo es bidireccional, por lo que puede empujar y tirar como con un control remoto nativo (git). No se hacen preguntas.

Si va a generar un parche en SVN y aplicarlo con Git más tarde, no olvide usar --git opción de línea de comandos :

  

--git

     

Habilita un modo de salida especial para svn diff diseñado para compatibilidad cruzada con el popular control de versión distribuido de Git   sistema.

Por ejemplo, ejecute

svn diff --git -r 125 > /tmp/patch.diff

Además de usar el parche como se mencionó anteriormente, también podría considerar configurar un enlace posterior al compromiso para que no tenga que hacer esto cada vez que confirma algo nuevo.

Lo siguiente funcionó para mí.

Fuente: Cómo para crear y aplicar un parche con Git

Primero, observe qué cambios hay en el parche . Puede hacerlo fácilmente con git apply

git apply --stat fix_empty_poster.patch

Tenga en cuenta que este comando NO APLICA el parche, sino que solo le muestra las estadísticas sobre lo que hará # 8217; Después de mirar el archivo de parche con su editor favorito, puede ver cuáles son los cambios reales.

A continuación, está interesado en lo problemático que será el parche . Git le permite probar el parche antes de aplicarlo realmente.

git apply --check fix_empty_poster.patch

Si no obtiene ningún error, el parche se puede aplicar limpiamente & # 128512 ;. De lo contrario, puede ver en qué problemas se encontrará.

Para aplicar el parche, usaré git am en lugar de git apply. La razón de esto es que git am le permite firmar un parche aplicado. Esto puede ser útil para referencia posterior.

git am --signoff < fix_empty_poster.patch

Applying: Added specs to test empty poster URL behaviour
Applying: Added poster URL as part of cli output

Bien, los parches se aplicaron limpiamente y su rama maestra se actualizó. Por supuesto, ejecute sus pruebas nuevamente para asegurarse de que nada se haya roto.

En su registro de git, encontrará & # 8217; encontrará que los mensajes de confirmación contienen un & # 8220; Firmado por & # 8221; etiqueta. Github y otros leerán esta etiqueta para proporcionar información útil sobre cómo terminó la confirmación en el código.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top