¿Hay alguna forma de hacer que un parche creado con git format-patch sea compatible con svn para poder enviarlo a un repositorio svn?
Estoy trabajando en un repositorio svn en github y quiero enviar mis cambios al repositorio principal. Necesito crear un parche para hacer esto, sin embargo, el parche no se puede aplicar ya que los formatos git que parchean de manera diferente a svn. ¿Hay algún secreto que no haya descubierto todavía?
ACTUALIZACIÓN: aunque actualmente no existe un script o una forma nativa de git para hacer esto, logré encontrar una publicación de principios de este año sobre cómo lograr esto manualmente. Seguí las instrucciones y tuve éxito al hacer que mis parches de git funcionaran con svn.
Si alguien pudiera intentar escribir un guión para lograr esto y contribuir al proyecto git, todos serían muy apreciados.
http://kerneltrap.org/mailarchive/git/2008/1/15/570308/thread#mid-570308
fuente
Respuestas:
Siempre tengo que buscar en Google esto, pero la forma en que descubrí que funciona perfectamente (para mí) es:
git diff --no-prefix master..branch > somefile.diff
, la parte maestra y la rama son opcionales, depende de cómo desee obtener sus diferencias.patch -p0 < somefile.diff
.Siempre parece funcionar bien para mí y parece ser el método más simple que he encontrado.
fuente
--no-pager
ya no es una opción paragit diff
.--no-pager
, no estoy seguro de por qué se agregó en la edición. Siempre me ha funcionado bien sin de--no-pager
todos modos.git diff --no-prefix 056a1ba5140 7d939289b80 >my.patch
funcionó para mí (donde056a1ba5140
y7d939289b80
son los sha-1 de la confirmación anterior y particular en git).La respuesta corta es
patch -p1 -i {patch.file}
.Consulte este blog para obtener más detalles: Creación de parches de Subversion con git .
fuente
Aquí hay un script de ayuda para hacer una diferencia con el último conjunto de cambios svn y la confirmación dada: http://www.mail-archive.com/[email protected]/msg00864.html
fuente
git svn info
así:REV=`git svn info | grep 'Last Changed Rev:' | sed -E 's/^.*: ([[:digit:]]*)/\1/'`
SVN probablemente no pueda entender la salida de
git diff -p
, pero puede recurrir a la fuerza bruta:diff -r
los dos clones.fuente
git diff --no-prefix > somefile.diff
en su repositorio de git y envíelo a cualquier usuario de svn para que aplique el parchepatch -p0 < somefile.diff
en la raíz del proyecto.Subversion <1.6 no tiene soporte para parches. Parece que Subversion 1.7 permitirá aplicar parches y las extensiones git / hg a diff unificado están en nuestra lista TODO.
fuente
De hecho, es una solicitud de función a principios de 2008
Linus Torvalds dijo en ese momento:
Puede ser por eso
se introdujo en Git1.5.6 en mayo / julio de 2008 (aunque no lo he probado)
fuente
Asegúrese de que sus cambios estén confirmados y basados en la parte superior de su rama git local, desde git bash run:
git show --pretty >> myChangesFile.patch
fuente
La respuesta aceptada proporcionada por Nicholas funciona bien, excepto cuando a) existen archivos binarios en el diff ob) está trabajando en Windows Git y tiene directorios con espacios. Para resolverlo, tuve que agregar un comando git diff anidado para ignorar los binarios y el comando sed para escapar de los espacios. Es un poco complicado de escribir, así que creé un alias:
Si luego escribe:
... se creará un archivo de parche Feature123.patch con las diferencias entre la base de combinación de la rama principal y la rama Feature123.
fuente