2009-12-15 33 views
13

Utilizo git diff para generar parches que se pueden aplicar al servidor remoto para actualizar un proyecto.Cómo aplicar git diff - ¿parches binarios sin git instalados?

localmente, corro:

git diff --no-prefix HEAD~1 HEAD > example.patch 

Subir example.patch al servidor remoto y ejecutar:

patch --dry-run -p0 < example.patch 

Si funcionamiento en seco es exitosa, corro:

patch -p0 < example.patch 

Esto funciona bien, excepto cuando diff incluye archivos binarios. Hoy en día, me di cuenta que puede utilizar:

git diff --no-prefix --binary HEAD~1 HEAD > example.patch 

El problema es que el archivo de parche generado no se puede aplicar con parche.

¿Cómo puedo aplicar estos archivos de parches binarios sin haber instalado git el servidor?

Me gustaría mantener la capacidad de usar secado en seco.

Gracias

Respuesta

6

Para una respuesta extravagante, lo que podría hacer es utilizar sshfs para montar el sistema remoto a donde quiera que tienes Git, y luego ejecutar los comandos de esa manera. Aborde el problema desde un marco de referencia diferente: en lugar de preguntarse cómo ejecutar comandos donde la herramienta no está, ¿por qué no crear un entorno donde los datos lleguen a su herramienta (a través de sshfs?)

+0

eso no está nada mal. muy, muy mal Me gusta –

+0

la única preocupación es que puede ser un poco lento para parches grandes (pero eso no debería suceder si está implementando muchos parches pequeños). Además, ¿qué pasa si hay un problema de conexión mientras aplica un parche? ¿parche? –

2

En muchas situaciones y en este también, no puede crear datos con una herramienta más avanzada y usarlos con menos avanzado. Es una feliz coincidencia que patch funcione para git-diffs no binarios. git diff introduce una extensión a la diferencia estándar.

Para lograr el objetivo, se puede:

  • instalar Git en el sistema de destino (que es el mejor enfoque, en realidad)
  • montaje sistema de destino a lo local, como chiggsy dice
  • simplemente scp/rsync nuevos archivos. Nada mal para los pequeños.
+1

Hola Temoto, gracias por la respuesta, pero estoy buscando una respuesta que no sé. –

-5

Utilice esta

git apply example.patch 
git add --patch 
git commit 

Se puede omitir la bandera --patch, pero no podrá ver todos los cambios y comprobar proceso de parcheo.

+2

¿Has leído mi pregunta? –

+0

OK, no lo obtuve exactamente primero. Entonces, si no tiene Git en el servidor remoto, la única forma es copiar los archivos binarios modificados. Por lo que yo sé, 'parche' no admite diferencias binarias. – Zebooka

+0

sí, el parche estándar no admite diferencias binarias, pero git diff puede generar parches binarios. Me gustaría aplicarlos sin haber instalado git en el servidor remoto. –

2

De acuerdo con the change log, podemos esperar que las versiones de parche> 2.6.1 admitan diferencias binarias GIT.

+0

parche 2.7.5 todavía no está en mi sistema :( –

+0

El registro de cambios en http://git.savannah.gnu.org/cgit/patch.git/tree/NEWS no parece mencionar esto tampoco ... –