¿Cómo aplicar SVN diff a Git?


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

Digamos que hago 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.

Author: NorrisSoftware, 2009-03-18

6 answers

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
 47
Author: drozzy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-05-25 01:42:56

Intenta:

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

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

 18
Author: MattJ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-03-18 18:13:07

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

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

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

Usando-s (--stdlayout) asume trunk/ branches/ tags/ layout estándar, pero puede tenerlo de cualquier manera (man git-svn).

La asignación es bidireccional, por lo que puede empujar y tirar como con un remoto nativo (git). Sin preguntas.

 5
Author: sehe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-03-16 15:32:08

Si vas a generar un parche en SVN y aplicarlo con Git más tarde, no olvides 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 Git distributed version control sistema.

Por ejemplo, ejecute

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

 4
Author: bahrep,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-07-29 10:44:54

Además de usar el parche como se mencionó anteriormente, también podría considerar configurar un gancho post-commit para que no tenga que hacer esto cada vez que confirme algo nuevo.

 2
Author: Federico Builes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-03-21 12:12:08

Lo siguiente funcionó para mí.

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

Primero, eche un vistazo a los cambios en el parche. Puedes 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á. Después de echar un vistazo al archivo de parches con su editor favorito, puede ver cuáles son los cambios reales.

A continuación, usted está interesado en cómo problemático el parche va a ser . Git permite probar el parche antes de aplicarlo.

git apply --check fix_empty_poster.patch

Si no se produce ningún error, el parche se puede aplicar limpiamente . 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 tu rama maestra ha sido actualizada. Por supuesto, ejecute sus pruebas de nuevo para asegurarse de que nada se rompió.

En tu git log, encontrarás que los mensajes de confirmación contienen una etiqueta "Signed-off-by". Esta etiqueta será leída por Github y otros para proporcionar información útil sobre cómo terminó la confirmación en el código.

 0
Author: Abhishek Bedi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-07-29 09:16:49