usar una tipos tag sirve qué podemos para nos existen etiquetas etiqueta cuando crear creamos comando git version-control project-management

una - Cómo gestionar múltiples versiones de un proyecto en Git



tipos de etiquetas existen en git (2)

Tengo un proyecto de código abierto que usa git para el control de revisiones. Pronto, también lanzaré una versión premium del proyecto, pero se realizarán cambios en el código específicamente para la versión premium (rendimiento, etc.), que no debería existir en la versión de código abierto.

Quiero evitar tener dos directorios / proyectos separados, porque si soluciono un error en la versión de código abierto, ese error es más probable que también en la versión alojada premium. No quiero hacer cambios en dos lugares.

¿Cuál es la mejor manera de manejar esto? Simplemente bifurcar en git no funcionará correctamente, ya que algunos archivos deben tener 2 versiones: una versión de código abierto y una versión alojada premium.

Gracias por la ayuda.


El uso de worktree es mejor para este propósito.

En mi caso, tengo dos versiones del mismo software que los conceptos básicos son los mismos, pero cada versión tiene algunas características diferentes.

Así que creo dos worktree , es decir, creo dos ramas relevantes de larga duración junto al maestro.

$git worktree add -b version-silver ../version-silver master $git worktree add -b version-gold ../version-gold master

Luego tengo:

$git branch master # base stuff here version-silver # some normal features version-gold # some better features

Hay un repositorio, pero tengo 3 carpetas separadas una al lado de la otra para cada rama de arriba. Y hacer los cambios comunes en el maestro. luego fusionarlo con las otras dos versiones.

cd master vim basic.cpp git add . git commit -m "my common edit on basic.cpp" cd ../version-silver vim silver.cpp git add . git commit -m "my specific edit on silver.cpp" git merge master # here i get the basic.cpp latest changes for silver project cd ../version-gold git merge master # here i get the basic.cpp latest changes for gold project

Los cambios específicos de cada versión también irán en la carpeta correspondiente, y los trabajos en cada proyecto están aislados y el IDE no se confundirá.

Espero que ayude.


Y, sin embargo, la ramificación debería funcionar y le permitirá mantener dos versiones separadas.

Si tiene un error que se aplica a la versión premium, corríjalo en el master y combínelo en la rama premium .
Git solo fusionará lo que ha cambiado desde que se ramificó entre master y premium , es decir, su corrección de errores.
Otra forma de publicar un hotfix en master y premium sería hacerlo desde un antepasado común: consulte " Git fusionando hotfix a varias sucursales ".

Actualización 2015: git 2.5 (julio de 2015) ha reemplazado a git-new-workdir presentado a continuación por el nuevo comando git worktree add <path> [<branch>] .

Para más información, vea "¿ Múltiples directorios de trabajo con Git? ".

Respuesta original 2012:

me-and menciona en los comentarios el comando git-new-workdir .
Ver:

Una solución para esto es simplemente crear otro clon local de su repositorio. Git utiliza automáticamente enlaces duros cuando clonas localmente, por lo que la clonación es muy rápida.
Pero hay un problema con esto: ahora tiene otro repositorio separado que necesita para mantenerse actualizado.

Aquí es donde entra git-new-workdir .
En lugar de hacer un clon completo de su repositorio, simplemente configura un nuevo directorio de trabajo (con su propio índice) para usted.
El propio repositorio real se comparte entre el directorio de trabajo original y el nuevo. Esto significa:

  • Si actualiza un repositorio, las nuevas confirmaciones también serán visibles instantáneamente en todos los otros directorios de trabajo.
  • Cree una nueva confirmación o rama en uno de sus directorios de trabajo, están disponibles al instante en todos los directorios de trabajo.

Nota: A pesar de que las confirmaciones están automáticamente allí, Git no actualizará la copia de trabajo si tiene la misma sucursal desprotegida. Tendrás que hacer eso por ti mismo.