Pregunta

Estoy trabajando en averiguar cómo trabajar mejor dentro de mi propia cesión temporal de código personalizado, mientras que la integración con la biblioteca de un proveedor (en este caso Magento). En mi caso, no tendrá que empujar hacia arriba parches para el vendedor (aunque eso sería un gran beneficio adicional).

He mirado en submódulo git y git subárbol. No creo submódulo Git va a trabajar para lo que necesito. Magento tiene el siguiente tipo de estructura de árbol:

/app
  /code
     /community *
     /core
     /local *
  /design
     /adminhtml
     /frontend
        /base
        /yourtheme *
/lib
  /Zend
  /Varien
  /yourlib *
/js
  /yourjs *
  /varien
  /mage

El uso de git submódulo parece funcionar mejor en carpetas separadas (por ejemplo, / es tu aplicación y / vendedor / Magento es el submódulo). Sin embargo, con este grado de entrelazamiento, un submódulo no parece ser una buena solución. ¿Estoy equivocado acerca de esto?

Eso me deja con sub-árbol git. Pero con el sub-árbol git, el mismo supuesto núcleo (que la rama de proveedor es, como lo implica el nombre, una rama) no es cierto. Magento no es un sub-árbol, pero la biblioteca central que mis ataques del proyecto dentro. ¿Es eso correcto?

Si esos dos métodos de Git no trabajo, ¿hay otros que debería saber que haría lo que estoy tratando de lograr?

La última opción Soy reacio a seguir es tener un acuerdo de recompra que a continuación solo se aplica durante los últimos cambios de proveedor (tirados en desde un paquete). Soy reacio a perseguir esto como que siento que disponer de información de registro del proveedor (sacado de https: // github .com / magentomirror / magentomirror ) sería una gran ayuda en la clasificación a través de nuevas versiones y averiguar qué cambios me han afectado.

¿Fue útil?

Solución

Creo que se puede utilizar la herramienta de modgit para esto: https://github.com/jreinke/modgit Podrás clonar algunos módulos de Magento con comandos clon modgit. Un ejemplo completo está disponible aquí: http: / /www.bubblecode.net/en/2012/02/06/install-magento-modules-with-modgit/

Otros consejos

No de esos métodos que mencionas realmente funcionó para mí ...

Actualmente estoy usando pera de instalar y administrar las actualizaciones de módulos comunitarios núcleo y, y cometiendo toda la estructura magento en el repositorio git con la siguiente .gitignore archivo:

# Dynamic data that doesn't need to be in the repo
/var/*
/media/*
/downloader/pearlib/cache/*
/downloader/pearlib/download/*
/app/etc/use_cache.ser
local.xml

y utilizando el siguiente comando del shell para mantener los directorios vacíos:

for i in $(find . -type d -regex ``./[^.].*'' -empty); do touch $i"/.gitignore"; done;

Otra idea pensé que es más para probar un proveedor modelo de ramificación, pero me temo que se sumará dolor de cabeza extra, especialmente en el caso de algunos grandes árboles de dependencias, es decir, para la verdadera eficacia se debe integrarse en el nivel de pera , es decir, cada módulo descargado debe ser ramificado de forma automática, por lo que, por ahora parece que es bueno para su uso exclusivo con extensiones de pago.

I se trató de disparar el tema en el foro de Magento, sino que también no tiene todas las respuestas: http://www.magentocommerce.com/boards/viewthread/78976/

Actualización:

Magento Compositor instalador -. Vale la pena analizar

Compositor convertirse en herramienta de gestión de la dependencia estándar para PHP, por lo que, obtendrá mucho más ventajas que utiliza con en su proyecto.

No necesitará comprometerse ni extensiones de rama, temas, libs en su árbol de proyectos, pero siempre tienen versiones y dependencias apropiadas.

Gracias.

Su pregunta es más sobre submódulo vs sub-árbol de git en general. No puedo pensar en nada específico de Magento que influirán en la comparación. Lo más probable es que son conscientes de las estrategias subárbol que se fusionan la que voy a recomendar, pero no estoy seguro de por qué se necesita para fusionar en un primer lugar.

Las mejores prácticas de fusión es evitarlo y arquitectura Magento es lo suficientemente flexible como para permitirlo. Seguir un conjunto de reglas simples:

  1. Evite parchear el código de proveedor.
  2. Si no se puede. Antes de hacer un parche, considerar empacar sus cambios en un módulo Magento costumbre y colocándolo en app / código / local.

Si su preocupación modificación del código PHP:

  1. Usted puede beneficiarse de la programación orientada a objetos y minimizar los cambios en sólo unos ciertos métodos. Extender respectivas clases.
  2. clase respectiva de sobrescritura usando el mecanismo de configuración Magento en config.xml.
  3. Si anterior es imposible de lograr -. Cabo los cambios (clases parcheados) en app / código / local, es decir, superior a fin include_path para que su código será utilizado de manera eficiente en lugar del código del proveedor

Si sus preocupaciones modificación PHTML templating -> utilización mecanismo de disposición de Magento para reemplazar phtml del proveedor con la suya. Una personalización diseño adecuado requerirá actividades de modificación pesadas y el trabajo de diseño de todos modos.

Si sus preocupaciones de modificación de JS -.> De nuevo, diseños de utilidad para vincular el código JS colocado en la piel o carpetas

creo que estamos hablando de cosas diferentes.

sugerencias de Yauhen son totalmente correctas. Usted puede lograr todo esto en Git, y no es necesario submódulos o subárboles.

que tengo sobre el mismo archivo .gitignore como usted, por lo que se ve bien.

Hice una valoración crítica sobre cómo utilizamos Git como un equipo para la gestión de almacenes magento aquí, tal vez será útil para usted:

Mejores prácticas para la implementación de Magento

Quilt-como flujo de trabajo

Esto es exactamente lo que se hizo anteriormente con el edredón, que hoy en día se hace con Stacked Git (en la parte superior de Git), Mercurial Queues (en la parte superior de Hg) o Loom (en la parte superior de Bazar).

La idea es mantener una serie de parches apilados uno sobre el otro, que se aplica a los archivos versionados por el SMC (potencialmente, también la creación de nuevos archivos, lo que sería el caso para usted). En cualquier momento, usted puede hacer estallar la pila por completo, actualizar el código de aguas arriba, a continuación, volver a apilar todos sus parches uno a uno. Si todos ellos se aplican limpiamente, se realiza de forma automática, si no, el proceso se detiene en el primer parche defectuoso.

Pure Git

La siguiente considera que está clonando un acuerdo de recompra Magento Git. Si ellos no usan Git, todavía puede hacerlo por primera traducción de su historia a Git, por ejemplo, con medida .

Rebase

Git hace que sea fácil de volver a aplicar una parte de la historia desde un punto de partida diferente, por rebase . Por lo que podría también acaba clon de Magento, el trabajo de su código y, al actualizar Magento, hacerlo desde la última revisión Magento limpia y luego se rebase su trabajo en la nueva revisión Magento limpio.

Es, básicamente, sigue el flujo de trabajo de edredón con herramientas normales de Git.

Ramas

Sin embargo, otra manera de hacerlo sería utilizar simplemente las ramas. Clonar cesión temporal de Magento, rama de ella, hace su cosa, y al recuperar últimas revisiones de Magento, se fusionan las dos ramas. Es sólo DVCS flujo de trabajo típico , considerando como Magento developper trabajando en una rama de la característica que nunca va a llegar a la rama principal ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top