Soy nuevo tanto en git como en control de versiones, así que estoy tratando de descubrir qué es un parche y en qué se diferencia del resto de actividades que hago en git.
¿Cuándo aplico un parche? ¿Sucede cada vez que me comprometo?
Soy nuevo tanto en git como en control de versiones, así que estoy tratando de descubrir qué es un parche y en qué se diferencia del resto de actividades que hago en git.
¿Cuándo aplico un parche? ¿Sucede cada vez que me comprometo?
Respuestas:
Puede ver en esta publicación de blog cómo puede crear un parche (colección de cambios que desea comunicar y aplicar a otro repositorio)
(imagen de la publicación de blog de 2008 " Bioruby con git: ¿cómo funcionaría eso? ", publicado por Jan AERTS )
Vea también Contribuir a Rails con Git como otro ejemplo concreto.
Hoy en día, la solicitud de extracción de GitHub hace que sea realmente fácil aplicar parches en repositorios de GitHub, lo cual es útil cuando no es un contribuyente directo (es decir, no tiene derecho a enviar directamente a un repositorio).
En realidad, recientemente, GitHub introdujo " Mejores correos electrónicos de solicitud de extracción " para mejorar la notificación de nuevos parches.
Patch es un programa de Unix que actualiza los archivos de texto de acuerdo con las instrucciones contenidas en un archivo separado, llamado archivo de parche.
En otras palabras, puede significar el archivo con instrucciones o un programa que procesa ese archivo y lo aplica a algo.
Ahora, ¿qué es un archivo de parche? Digamos que tiene un archivo de texto con 2 líneas:
This is line A.
This is line B, or otherwise #2.
Luego cambia la primera línea, y ahora su archivo se ve así:
This is SPARTA.
This is line B, or otherwise #2.
¿Cómo describirías el cambio en el contenido del archivo? Puede decir que la primera línea "Esta es la línea A". fue reemplazado por "Esto es SPARTA", o incluso la última palabra "A" de la primera línea fue reemplazada por otra palabra "SPARTA". Y eso es exactamente lo que nos dice diff . Digamos que tengo dos versiones de este archivo, una llamada file1.txt y otra file2.txt, luego ejecuto diff y obtengo esto:
$ diff -u file1.txt file2.txt
--- file1.txt 2011-11-26 11:07:03.131010360 -0500
+++ file2.txt 2011-11-26 11:07:13.171010362 -0500
@@ -1,2 +1,2 @@
-This is line A.
+This is SPARTA.
This is line B, or otherwise #2.
Al tener una descripción de los cambios, puede aplicarlo a un contenido inicial y obtener un contenido modificado. Y esos cambios, en un formato unificado que los programas tipo "parche" pueden entender, se denominan archivos de parche. Es como, en lugar de obtener un pez de alguien que te enseñe a pescar, para que puedas sacar ese pez de las aguas tú mismo. Ahora, apliquemos nuestro parche a file1.txt para que se vea exactamente como file2.txt:
$ cat file1.txt
This is line A.
This is line B, or otherwise #2.
$ cat file2.txt
This is SPARTA.
This is line B, or otherwise #2.
$ diff -u file1.txt file2.txt > changes.patch
$ cat changes.patch
--- file1.txt 2011-11-26 11:09:38.651010370 -0500
+++ file2.txt 2011-11-26 11:07:13.171010362 -0500
@@ -1,2 +1,2 @@
-This is line A.
+This is SPARTA.
This is line B, or otherwise #2.
$ patch < changes.patch
patching file file1.txt
$ cat file1.txt
This is SPARTA.
This is line B, or otherwise #2.
$
Puede pensar que es más fácil tener solo dos versiones de este archivo. Bueno, en este caso simple eso es cierto. Pero cuando tiene muchos archivos, y esos archivos son muy grandes, es mucho más eficiente tener algunas líneas de cambios en lugar de dos copias de todo.
Cuando se habla en términos de git, el archivo de parche todavía significa lo mismo, pero usar diff + patch sería una pesadilla. Por ejemplo, siempre tendrá que tener dos versiones del archivo (o incluso todo el repositorio) desprotegidas para poder compararlas. No suena tan bien, ¿verdad? Así que git se encarga de todo el trabajo duro por usted: compara su archivo local con lo que hay en el repositorio con el que está trabajando y puede mostrárselo como un "diff", o aplicar ese "diff" como un parche también conocido como confirmar sus cambios, o incluso le permite aplicar algún archivo de parche que ya tiene. Sin profundizar en los detalles, en este sentido, git es absolutamente igual a otros sistemas de control de versiones como SVN, o incluso CVS o forzosamente.
¡Espero eso ayude!
patch
programa incorporado . Pensé que git tenía su propia implementación.
Un parche es un pequeño archivo que indica los cambios realizados en un repositorio. Generalmente se usa cuando alguien externo a su equipo tiene acceso de solo lectura pero tiene un buen cambio de código disponible. Luego crea un parche y te lo envía. Lo aplica y lo empuja al repositorio de git. Todos se benefician de la versión actualizada, y el autor del parche no necesitaba acceso de lectura / escritura.
Realmente es principalmente una cuestión de seguridad (al menos, para eso la gente lo usa).
git diff
muestra los cambios como parches de forma predeterminada, le git apply
permite aplicar un parche, etc.).
Un archivo de parche representa un conjunto único de cambios que se pueden aplicar a cualquier rama, en cualquier orden. Al usar el parche, obtendrá diferencias entre uno o más archivos. Y luego, puede aplicar las diferencias (parche) para obtener los cambios en los nuevos archivos. Hay muchos usos para un parche en Git. Si tiene cambios no confirmados en su directorio de trabajo y necesita obtener esos cambios para aplicarlos en otro lugar, simplemente cree un parche y aplíquelo.
git diff > mypatch.patch
Si tiene archivos nuevos en su repositorio (sin seguimiento), entonces debe organizar el archivo antes de crear un parche (no confirmar) y usar el siguiente comando
git diff --cached > mypatch.patch
Luego puede aplicar el parche:
git apply mypatch.patch
Si desea realizar algunos cambios en un repositorio de git, que no tiene un permiso de escritura, simplemente realice los cambios y cree un parche entre ambos, y envíe el parche a alguien que tenga el permiso para aplicar el parche. sus cambios deben agregarse a ese repositorio de git.
git format-patch <base_commit_or_branch_name>
= envuelva todas las confirmaciones desde ahora de nuevo a <base_commit_or_branch_name> en archivos agradables y limpios que contengan los mensajes diff así como los mensajes de confirmación, para enviarlos fácilmente (por ejemplo, por correo electrónico) a otra persona que quiera parchearlos su código base Luego, el destinatario parchea su sistema con su archivo:cat *.patch | git am
Un parche es un conjunto de diferencias entre uno o más archivos, para mostrar lo que es diferente entre ellos. Por lo general, solo generaría un parche para mostrarle a alguien lo que ha cambiado. Un ejemplo de cuándo puede hacer esto es cuando encuentra y repara un error en una aplicación de código abierto y luego publica la solución en su rastreador de errores.