Estaba experimentando con el formato de parche git para crear parches de un repositorio y aplicarlo a otro repositorio. Para mi sorpresa, funcionó a pesar de que esos dos archivos eran extremadamente diff. ¿Alguien puede explicar los aspectos técnicos de cómo exactamente maneja git la aplicación de un parche? Obviamente, no solo utiliza números de línea, así que si alguien puede señalarme en la dirección correcta, sería increíble.explicación técnica de Git/Diff Patch
Respuesta
Hay parches se pueden aplicar a los archivos modificados dos maneras principales:
- juego sin modificar (“contexto”) y pre-modificación de líneas
- de 3 vías de combinación basada en la línea “índice” de Git
las líneas de contexto (precedida por un solo espacio en lugar de una +
o -
) son una parte del formato unified diff sobre la cual formato diff de Git se basa en gran medida. Son líneas adicionales que son idénticas en los archivos fuente "original" y "modificado" pero que rodean las regiones modificadas. Estas líneas de contexto (junto con las líneas de pre-modificación (es decir, líneas eliminadas/cambiadas)) son utilizadas por el programa que aplica el diff para encontrar dónde se debe aplicar cada "hunk" de diferencias, incluso si el archivo "objetivo" de destino ya ha insertado o líneas eliminadas antes de la ubicación objetivo normal (la ubicación normal está especificada por los números de línea, que han cambiado efectivamente en el archivo "objetivo" (con respecto al archivo "original") debido a las líneas insertadas/eliminadas).
El formato de diferencias de Git también incluye una línea especial "índice" para cada archivo modificado que indica los identificadores de objeto (es decir, abreviaturas SHA-1 abreviadas) para los archivos "original" y "modificado". Si el repositorio de destino tiene el archivo "original" en su almacén de objetos, puede usarlo para reconstruir exactamente el contenido del archivo "modificado" y luego realizar un three-way merge entre las tres versiones del archivo: "original", "modificado" (ambos archivos fuente) y "objetivo" (el archivo de destino). Esto es usado por git am -3
y puede ayudar a resolver automáticamente algunos conflictos entre el parche y el archivo "objetivo".
- 1. HTML Dif/Patch Algoritmo
- 2. HTTP Patch XmlHttpRequest support
- 3. Monkey-patch Clase Python
- 4. técnica de codificación Jpeg
- 5. Técnica de notificación ligera
- 6. 9-patch - 1px borde borroso
- 7. Python novato @patch tema decorador
- 8. git add --patch with difftool
- 9. git format-patch sin comprometer
- 10. my 9 Patch Image dejó de funcionar
- 11. Método de solicitud PATCH en Backbone.js
- 12. Simplest técnica de rollover/hover
- 13. GAS: Explicación de .cfi_def_cfa_offset
- 14. Uso de clipRect - explicación
- 15. Explicación de Android Xfermode
- 16. Explicación de contribute_to_class
- 17. Explicación de POCO
- 18. Tamiz de Atkin explicación
- 19. Explicación de NHibernate HiLo
- 20. Explicación de Func
- 21. R explicación de redondeo
- 22. explicación concisa de Core.logic
- 23. Symfony2 explicación de CompilerPass?
- 24. un archivo al parcial (Patch) a SVN
- 25. ¿Cómo Monkey Patch en Ruby on Rails?
- 26. ¿Cómo mono patch __init__ módulo en Python?
- 27. ¿Cómo hago una solicitud PATCH en Python?
- 28. ¿Administra activamente la deuda técnica?
- 29. ¿Qué técnica de protección de copia usas?
- 30. Mejor técnica de sustitución de imágenes
Puedes simplemente mirar el código. – Dipstick
El código solo tiene rangos de número de línea con + y - líneas para eliminar y agregar. – David