Compositor: cómo hacer un seguimiento de los cambios en los packages

¿Cuál es la mejor manera de rastrear (mis) cambios a los packages de Composer y luego combinarlos con actualizaciones posteriores de los packages?

Estos son cambios / personalizaciones que hice en un package que son específicos para un proyecto determinado.

Actualmente estoy comprometiendo la carpeta /vendor con mi VCS y luego fusionando / actualizando mis cambios allí, pero me imagino que hay una mejor manera.

¿Debería usar svn: externals o los submodules de Git para este tipo de cosas?

Básicamente, hay solo dos opciones si el software externo que utiliza no ofrece la function que necesita:

  1. Ofrezca un parche que se includeá en la versión oficial para que pueda usar la function que deseaba directamente dentro del software externo.
  2. Modifique su forma de include el software para que SU característica agregue la característica y use el software externo sin modificaciones.

La tercera forma sería modificar constantemente las nuevas versiones del software externo a su gusto, pero esto terminará en un infierno de mantenimiento. Parece que haces esto, pero no deberías.

Ambos submodules svn externals o git son, además, una mala forma de lidiar con esto, especialmente si desea usar Composer para mantener sus dependencies.

Entonces, la forma correcta es crear un package usted mismo que dependa de otro package externo y agregue la característica que desea. Luego puede usar Composer exclusivamente para administrar dependencies. El mantenimiento es fácil, porque la dependencia del package externo puede vincularse a una única versión si es necesario, o relajarlo a una variedad de versiones, siempre que su modificación sea compatible.

En caso de encontrar una nueva versión externa que no sea compatible con su modificación, puede crear una nueva versión de su package que dependa de la nueva versión pero no la anterior, y recrear la modificación. La actualización de su software principal a la nueva versión de su modificación también searchá automáticamente la versión más nueva del software externo, o rechazará instalar su modificación más reciente porque otro package depende de la versión externa anterior.