¿Cómo aplicar el parche 'git diff' sin Git instalado?


¿Cómo puede mi cliente aplicar el parche creado por git diff sin git instalado? He intentado usar el comando patch pero siempre pide el nombre del archivo para parchear.

 264
Author: Ryan, 2010-08-05

5 answers

git diff > patchfile

Y

patch -p1 < patchfile

Trabajo, pero como muchas personas notaron en los comentarios y otras respuestas parche no entiende añade, elimina y cambia de nombre. No hay otra opción que git apply patchfile si necesita agregar, eliminar y renombrar el archivo handle.


EDIT Diciembre de 2015

Las últimas versiones del comando patch (2.7, lanzado en septiembre de 2012) admiten la mayoría de las características del formato "diff git git", incluidos los cambios de nombre y copias, los cambios de permisos y las diferencias de enlaces simbólicos (pero no yet binary diffs) (release announcement).

Así que siempre que se use la versión actual/última de patch no hay necesidad de usar git para poder aplicar su diff como un parche.

 401
Author: Andrey Kuznetsov,
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-12-09 16:17:19

Prueba esto:

patch -p1 < patchfile
 72
Author: suppie,
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-10-24 12:59:29

Use

git apply patchfile

Si es posible.

patch -p1 < patchfile 

Tiene un efecto secundario potencial.

git apply también se encarga de agregar, eliminar y renombrar archivos si se describen en el formato git diff, lo que patch no hará. Finalmente, git apply es un modelo "aplicar todo o abortar todo" donde se aplica todo o nada, mientras que patch puede aplicar parcialmente archivos de parches, dejando su directorio de trabajo en un estado extraño.

 49
Author: Sola Yang,
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
2014-06-01 08:12:57

Utilizo

patch -p1 --merge < patchfile

De esta manera, los conflictos pueden resolverse como de costumbre.

 6
Author: denis.peplin,
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-09-12 05:05:39

Prueba esto:

$ git apply file.diff
 -11
Author: Shashi,
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-02-12 01:09:56