2011-03-25 43 views
21

Estoy usando GIT para administrar un proyecto del Sistema de gestión de contenido (CMS). El CMS puede tener múltiples plugins (módulos).submódulo o sub-repositorio Git o remoto?

Así que, básicamente, quiero tener 3 tipos de repositorios:

  • El desarrollo básico de la CMS (cada nuevo proyecto es un check out de la última estable & versión sin configurar)
  • 1 repositorio por módulo/plugin . (Cada nuevo proyecto será la comprobación de la última versión estable del módulo que quieren poner en práctica)
  • 1 repositorio por proyecto (cada cliente será un depósito que representan la personalización del núcleo CMS y los módulos)

Para el tipo 1 & 2, supongo que es un repositorio básico simple. Pero cuando se trata de proyecto de cliente, que se confunden:

  • primer lugar voy a clonar el CMS, y luego ir en el/modules/carpeta y clonar de nuevo todos los módulos necesarios? ¡Eso hará un repositorio dentro de un repositorio! ¿El primer repositorio intentará registrar la carpeta .git/de cada módulo?
  • No puedo usar el submódulo ya que cada cliente necesita que sus módulos sean personalizados.
  • Si modifico un componente central de un módulo (no una personalización, solo una corrección de errores), ¿puedo insertar ese único archivo en el repositorio de módulos original?
  • (no hablar del módulo unittest que se extendió por todas partes)

Así que la pregunta es: ¿Cómo debería organizar el repositorio (s)/archivos/carpetas con el fin de ser eficientes?

Respuesta

12

El diseño que ha descrito funcionará muy bien con los submódulos de git. Recomiendo leer el docs y probar algunos tutorials. La diferencia clave que presenta su plan es que cada repositorio de cliente y repositorio de complemento de cliente tendrá dos controles remotos en lugar de uno. Y, cuando se quiere iniciar un nuevo proyecto de cliente tendrá que

  1. tenedor el cms de largo recorrido
  2. tenedor todos los plugins que se van a modificar
  3. clonar el cms bifurcadas de (1), actualización sus submódulos que apuntan a los nuevos mandos a distancia de (2)
  4. initialize/actualizar los submódulos
  5. (opcional) añadir la URL cms de largo recorrido como un control remoto en cms bifurcadas de su cliente
  6. (opcional) añadir las direcciones URL de la línea principal del plugin como controles remotos en tu cli plugins forzados de ent

Una mejor opción puede ser utilizar el mismo repositorio y simplemente crear una rama por cliente. Así es como lo haría.

+0

Bien, he leído el submódulo de ayuda de git y dicen: "No deben confundirse con mandos a distancia, que están destinados principalmente a las ramas del mismo proyecto; los submódulos están destinados a diferentes proyectos que le gustaría hacer parte de su árbol fuente, mientras que el historial de los dos proyectos sigue siendo completamente independiente y no puede modificar el contenido del submódulo desde el proyecto principal ". ... en mi caso, querré modificar el submódulo dentro del proyecto del cliente en caso de que necesite personalizar un complemento. ¿Ahora me dices que podemos modificar los submódulos? – FMaz008

+1

sí. Modifique el código del complemento del cliente, comprométalo e inserte los cambios en (2), luego vaya al código CMS del cliente y comprométalo e inserte el cambio en el complemento (actualiza el hash SHA) en (1). –

+0

Ok, suena como una buena respuesta, pero aún tengo una pregunta complementaria sobre la organización/estructura de la carpeta: http://stackoverflow.com/questions/5461617/using-git-and-submodule-whats-a-good-folder -estructura – FMaz008

4

breve actualización/información adicional sobre la respuesta anterior: si no te gusta git submodules aproximación o piensa que esto es demasiado difícil de entender, puede intentar

  • git subtrees (marque this article on medium)
  • o git subrepo (Más fácil alternativa a los submódulos, en Github)
  • o incluso bucear más profundamente en los submódulos con "Dominio del submódulo Git" en medium.com

No se olvide de comprobar si se puede usar otro gestor de depency (como RubyGems para Ruby, PHP ... Compositor para) en lugar de submódulos, que sería más fácil de usar y mantener.

Cuestiones relacionadas