2010-10-24 8 views
21

Me gustaría incorporar un proyecto existente (alojado en GitHub) como parte de mi proyecto (en un subdirectorio) mientras se mantiene el historial y la capacidad de actualizar ese proyecto. Me he dado cuenta que no puede haber unos tres enfoques:Git/GitHub: fork, subtree merge o submodule para el código externo?

  1. Tenedor el proyecto original, mueva el contenido original en un subdirectorio y empujarlo a mi repo GitHub.
  2. Inicia un nuevo repositorio, haz un subárbol combina con el repositorio existente y presiona a mi repositorio de GitHub.
  3. Clonar el repositorio existente, hacer un nuevo repositorio principal, poner el repositorio clonado en el principal como un submódulo, pulsar.

La variante (1) podría ser la preferible en GitHub ya que probablemente puedan compartir las fuentes. Pero, lógicamente, mi proyecto no es una bifurcación del existente. Más bien, el existente es solo un módulo. Además, no estoy seguro si mover el código existente en un subdirectorio podría no generar problemas. Probablemente preferiría la (2) variante ya que solo hay un repositorio. (3) requeriría trabajar con varios repos, pero lógicamente es lo más cercano a mi situación.

He investigado esto bastante, pero definitivamente no estoy seguro. ¿Qué recomendarías en esta situación? ¡Gracias de antemano!

Respuesta

7

Si el ciclo de vida de desarrollo de los dos proyectos (el de GitHub, y el suyo) son diferentes, entonces el enfoque del submódulo es mejor.
Es decir, si cambia su proyecto sin tener que cambiar sistemáticamente el otro proyecto de GitHub, entonces debe considerar el enfoque de submódulo.

Sin embargo, para implementar esto, se necesitaría una combinación de (1) y (3):

  • si no puede contribuir (push) directamente al proyecto GitHub, es necesario que tenedor que (1)
  • , entonces necesita referenciar ese proyecto bifurcado como un submódulo en su proyecto (3).

Esto permitirá que se dirija una revisión específica del proyecto GitHub, mientras que le permite actualizar y hacer que el submódulo de inserción específicas para él (como se describe en "true nature of submodules").
Pero una vez que haya actualizado el submódulo, no olvide comprometer su proyecto (que es el "proyecto principal" para el submódulo), para registrar la nueva revisión del submódulo al que está haciendo referencia.

+1

No creo que la horquilla sea estrictamente necesaria si no necesita cambiar el submódulo, ¿no? – iwein

+1

@iwein: correcto, pero el OP mencionó explícitamente "mientras se mantiene el historial y la capacidad de actualizar ese proyecto": es decir, necesita actualizar ese submódulo. De ahí mi proposición incluyendo un tenedor. – VonC

+0

Gracias por los consejos. Vamos a aclarar la situación. El otro proyecto es un proyecto externo que no mantengo. Solo lo uso como parte de mi proyecto, pero quiero modificarlo. De vez en cuando me gustaría actualizar los cambios del proyecto externo a mi versión modificada. Además, no espero que mis cambios vayan al proyecto externo. Además de este proyecto externo modificado, espero que habrá más módulos que voy a crear. –

Cuestiones relacionadas