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.