2011-01-07 5 views
72

No veo una diferencia entre la salida de 'git format-patch' y 'git diff', ¿hay alguna? ¿Y no podré usar 'git diff' para producir un parche y luego aplicarlo usando git apply?¿Cuál es la diferencia entre 'git format-patch' y 'git diff'?

Mi problema es que tengo cambios agregados al índice, pero aparentemente git format-patch solo acepta confirmaciones, así que si puedo usar el resultado de diff, entonces puedo usar este comando para producir un parche para los cambios en el índice:

git diff --cached > index.patch 

Respuesta

108

Un parche creado con git format-patch también incluirá algunos meta-información sobre la confirmación (confirmador, fecha, mensaje de consignación, ...) y la voluntad de diff contiene datos binarios. Todo se formateará como un correo electrónico, de modo que se pueda enviar fácilmente. La persona que lo recibe puede volver a crear la confirmación correspondiente con git am y todos los metadatos estarán intactos. También se puede aplicar con git apply ya que es un superconjunto de una simple diferencia.

Un parche creado con git diff será una simple diferencia con contexto (piense diff -u). También se puede aplicar con git apply pero los metadatos no se recrearán (ya que no están presentes).

En resumen, git format-patch es útil para transmitir una confirmación, mientras que git diff es útil para obtener una diferencia entre dos árboles.

8

De los manuales git-format-patch se preparan parches adecuados para el envío de correos electrónicos, mientras que git-diff muestra cambios.

Son dos cosas diferentes y tienen diferentes propósitos, simplemente producen un formato de parche. Pero git-format-patch agrega datos sobre un compromiso (fecha, autor, mensaje de confirmación) y los agrupa en un formato adecuado para enviar como mensaje de correo Unix (aunque solo son archivos, por lo que pueden enviarse a otros métodos y seguir aplicándose por git-am).

También git-format-patch genera un archivo de parche para cada confirmación en el rango que especifique. Estos cambios se agregarán como commits a su repositorio con git-am.

git-diff solo muestra la diferencia entre los dos estados que solicita y se puede utilizar para crear un archivo de parche. Pero esto es solo un archivo de parche normal y la aplicación del parche solo cambiará el estado del directorio de trabajo.

Y sí, puede crear un parche para su índice de esa manera.

+0

Gracias. ¿Qué tiene de especial el correo de UNIX para que diseñen el parche basado en él? – Rafid

+7

No hay nada realmente especial. Esto es solo que Git fue diseñado por Linus Torvalds, cuyo flujo de trabajo implicaba enviar y recibir parches por correo electrónico para su validación antes de la integración en el kernel de Linux. –

+0

Git fue [diseñado por Linus Torvalds] (http://youtu.be/4XpnKHJAok8) para mantener el kernel de Linux. El correo de Unix era un formato común. – Abizern

Cuestiones relacionadas