Me puede ayudar a fusionar los cambios durante una actualización de la aplicación

De vez en cuando realizo actualizaciones de software (software de Atlassian, jira, confluencia, etc.) para nuestros clientes. Un problema que encuentro cada vez es que el cliente podría haber hecho alguna personalización de la versión instalada (cambios de configuration, templates web modificadas, etc.) que deberían manejarse (preservar o ignorar). No sé exactamente qué files cambiaron y necesito estar seguro de no perderme nada. Mi solución hasta ahora ha sido extraer la installation tar.gz de la versión instalada y usar rsync (con –verbose –dry-run –itemize-changes) para identificar qué ha cambiado. Luego hago un poco de magia grep y sed para filtrar las partes interesantes y aplicar los cambios detectados "manualmente".

Entonces, básicamente, tengo tres directorys; A (Old-version-with-changes), B (Old-version-clean) y C (New-version). Me gusta identificar los cambios en i A en comparación con B y opcionalmente aplicarlos a C.

Ahora, ¿podría usar git para ayudarme en este process? Particularmente no me gusta la aplicación manual de la parte de cambios. Soy bastante nuevo en git, ¿podría alguien señalarme en la dirección correcta o decirme por qué esta es una idea horrible?

Una forma tradicional de hacerlo es con diff y patch . Todo el mundo sabe diff –it compara files e imprime sus diferencias. Puedes usarlo con directorys integers también. Pero no todo el mundo sabe que puede tomar el resultado de diff (en el modo correcto) y alimentarlo al patch -p1 o similar y hacer que realice los cambios especificados en el file diff (comúnmente llamado *.patch ).

Si sabe para qué versión de la herramienta se instaló, simplemente descomprima una copy nueva en un directory temporal, luego difúndalo con la copy de trabajo. Eso le dará un file de parche (que seguramente puede almacenar en control de fuente). Ese file se puede aplicar ("portar") a otras instancias instaladas, incluidas otras versiones, siempre que no haya conflicto de fusión. Se te notificará si hay un conflicto y luego podrás arreglarlo a mano.

Incidentalmente, así es como funciona el empaquetado de Linux a veces: los distribuidores toman las fonts originales y sus propios files de parches y los entrelazan en el momento de la construcción / empaque.