Git: ¿Rama o Tenedor?

17

Tengo un proyecto de juego que tendrá dos versiones:

  1. Una versión simple del juego, el núcleo.
  2. Una versión avanzada del juego.

Tengo la primera versión en mi repositorio público, y solo estaré trabajando en ella. En cuanto a la segunda versión, dos amigos míos y yo trabajaremos en ello. La parte crucial es que quiero que las dos versiones permanezcan en mi repositorio.

Pensé que podría usar ramas para esto, pero teniendo en cuenta esta pregunta y su respuesta , no es una buena práctica hacerlo en términos de versiones. Por lo que he descubierto, no es posible bifurcar su propio repositorio.

¿Cuáles son mis opciones aquí? ¿Cómo puedo mantener ambas versiones en mi repositorio?

Varaquilex
fuente
3
Un tenedor es una rama, solo almacenada en otro lugar.
@MichaelT Ok. ¿Las horquillas deben fusionarse en algún momento, como ramas?
Varaquilex
22
Fork es un concepto github, no un concepto git. Simplemente clona y lo pone en su cuenta. Entonces, la clonación es lo que estás buscando. Ver stackoverflow.com/questions/6286571/git-fork-is-git-clone
pdr
@Varaquilex Way, ¿necesitaría mantener ambas versiones en un único repositorio? Además fork, un repositorio creará un nuevo repositorio en su cuenta.
Mahdi
1
¿Por qué no solo tener una versión que pueda ejecutarse en modo simple o avanzado? Por supuesto, algunas partes del código solo estarían activas en simple y algunas partes solo estarían activas en avanzado, pero imagino que se compartiría mucho.
bdsl

Respuestas:

11

Para mí, parece que necesitas dos repositorios, no dos ramas . Una rama es un mecanismo para manejar los cambios dentro de un repositorio único para finalmente fusionarlos con el resto del código.

Si realmente desea mantener ambas versiones de una base de código similar en el mismo repositorio, entonces su única opción es buscar una Rama , sin embargo, como se mencionó anteriormente, el propósito principal de una rama es separar algunas confirmaciones específicas de una manera que no entren en conflicto con el resto del código durante el período de desarrollo y los fusionen cuando estén listos para comenzar.

Hay situaciones en las que un repositorio tiene dos ramas ligeramente diferentes, por ejemplo, versiones de 32 bits y 64 bits del mismo código fuente, sin embargo, aún así le recomiendo que busque repositorios separados, si esa es una opción.

Mahdi
fuente
6

La respuesta a la pregunta "¿Debería clonar o bifurcar" es exactamente la misma que la respuesta a esta pregunta "¿Quiero mi propia versión personal de este proyecto?" yes = fork, no = clonar el repositorio.

En git, la rama es algo ligero que a menudo es temporal y puede eliminarse. Una bifurcación (en github) es un nuevo proyecto que se basa en un proyecto anterior. Clonas un repositorio para trabajar en él como miembro del equipo.

Muchos proyectos públicos le obligan a bifurcar el proyecto para mantener los cambios de trabajo fuera del proyecto principal.

Para la fase 2, bifurca el proyecto y clónalo en tu computadora de trabajo y haz que tus amigos hagan lo mismo.

DwB
fuente
¿Cómo puedo bifurcar mi propio proyecto?
Varaquilex
seleccione el repositorio en github y luego haga clic en fork (botón en la parte superior derecha para mí)
DwB
Sé cómo hacerlo, el problema es que cuando intentas clonar tu propio proyecto, simplemente eres redirigido al repositorio, como presionaste el botón Actualizar. No hay repositorios adicionales enumerados cuando navega por sus repositorios después de intentar bifurcar su propio proyecto. Creo que voy a hacer un nuevo repositorio, copiar el contenido del otro repositorio que quiero bifurcar y continuar trabajando con otras personas allí.
Varaquilex
0

Lo que realmente parece que quieres es un submódulo. Si crea el primer repositorio (su repositorio simple privado) y luego lo agrega como un submódulo al repositorio de la versión avanzada, entonces debería poder rastrear y extraer cambios en el submódulo en el repositorio avanzado a medida que desarrolla el repositorio simple privado.

Ryan Holleran
fuente
1
Varias personas se han tomado el tiempo para -1 la respuesta de Ryan, pero no se han tomado el tiempo para hacer un comentario de por qué, y este comportamiento va en contra del espíritu de las directrices de SO. Si en la pregunta del OP, el "núcleo" era idéntico en ambos árboles, con una envoltura "simple" y "avanzada" alrededor del núcleo, entonces esta respuesta es al menos razonable.
Scott Prive
He votado a favor, pero probablemente debería incluir una explicación como la suya que explique por qué un submódulo sería bueno y cómo funcionaría. Dividir el código común en una biblioteca que se puede incluir como un submódulo es una buena idea, pero sin especificar eso, la sugerencia de un submódulo no parece tener sentido de inmediato.
Sean Burton