¿Cómo funcionan los parches en Git?
Soy nuevo en Git, pero estoy familiarizado con SVN. Como prueba hice un repositorio en un directorio local con git init
. Luego cloné el repositorio vacío (sobre SSH usando 127.0.0.1, que es otra cosa que quería probar) a otro directorio local. Agregué algunos archivos en el repositorio 2, hice git add *
y finalmente git commit -a -m "First source code"
.
Ahora quiero crear un parche usando git format-patch
y aplicarlo en el repositorio 1. ¿Cómo hago esto? Sé que hay un manual, pero estas cosas son terriblemente complicadas y me dan ganas de hacer ciertas cosas para mi monitor.
5 answers
Crea tu parche a través de:
$ git format-patch master --stdout > patch.diff
Luego parche.diff contendrá el diff, que luego puede enviar a otra persona para aplicar usando:
$ git am < patch.diff
A Veces, cuando los manuales son un poco densos, tiene sentido buscar un tutorial:
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
2010-01-17 19:33:54
El método más fácil para crear parches desde el último commit (o los últimos commits) es usar format-patch
con un número negativo que indica el número de commits para crear parches para:
git format-patch -1
Obtendrá un archivo de parche con el nombre de la descripción del commit. El uso am
para insertarlo en otro repositorio:
git am << name_of_patch_file
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
2010-01-17 19:37:10
La forma correcta y más fácil de hacer esto si estás usando Git es a través de controles remotos:
cd \path\to\repo1
git remote add otherrepo \path\to\repo2
git fetch otherrepo
git log otherrepo/master ## Find the commit you want to steal in the list
git cherry-pick SOME_SHA1 ## Snag just one commit
git merge otherrepo/master ## Merge all of the new commits from otherrepo/master
Esto migrará commits de un repositorio a otro, incluidos sus autores y mensajes de confirmación, y le ayudará a resolver los conflictos de fusión (especialmente si está moviendo > 1 commit)
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
2012-02-13 07:27:41
Usando el parche de GitHub
-
Agregue
.patch
a una URL de confirmación para obtener el archivo de parche, ejemplo -
Parchea el archivo original así:
git am /tmp/b6b3b6a.patch
Usando GitHub diff
-
Agregue
.diff
a una URL de confirmación para obtener el archivo de parche, ejemplo -
Parchea el archivo original así:
git apply -p0 /tmp/b6b3b6a.diff
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
2013-05-18 04:34:32
Tienes que ir al" repositorio 2", desde el que quieres crear el parche, y ejecutar git-format-patch para crear el parche : git format-patch master st stdout > name_of_patch_file
Luego entras en" repositorio 1", al que quieres aplicar el parche : git apply name_of_patch_file
A veces es útil simplemente comprobar si el parche causará problemas : git apply check check name_of_patch_file
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
2010-01-18 15:05:58