Hacia un mejor flujo de trabajo con Git
(black7375.tistory.com)Hemos recopilado formas de usar Git de manera más eficiente.
- Estructura del repositorio
- Git es un sistema de control de versiones distribuido, así que puede organizarse de varias formas: centralizada, al estilo GitHub/GitLab, jerárquica, etc.
- Estructura de ramas
- GitHub Flow: se mantiene
Mainy luego se crean ramas de funcionalidad o de corrección de errores, que se fusionan después de recibir retroalimentación - Git Flow: conviene más para un desarrollo tradicional que para despliegues frecuentes
- Se crean ramas
Featurey se fusionan en la ramaDevelop - Cuando
Developestá lo suficientemente madura, se crea una ramaRelease(Stage), donde solo se corrigen errores y luego se fusiona enDevelopyMaster - Cuando todo está listo para el release, se fusiona en la rama
Mastery después solo se hacen hotfixes
- Se crean ramas
- GitLab Flow: una forma intermedia entre el complejo Git Flow y el demasiado simple GitHub Flow
- En lugar de una rama
Releasetemporal como en Git Flow, usa una ramaStageque se mantiene de forma permanente - Los hotfixes se reflejan en
ProductionyStage, y las correcciones de errores enStageyDevlop
- En lugar de una rama
- Perforce Stream: útil cuando hay que gestionar varios releases
- Si se corrige un bug en
Release, el cambio se propaga haciaMain-Develop - Si se desarrolla una funcionalidad en
Develop, se eliminan conflictos y se refleja enMain
- Si se corrige un bug en
- Basado en trunk: un intento de usar
Main(Master) de forma más eficiente, adoptado sobre todo por grandes empresas tecnológicas- Se mantiene
Mainpor largo tiempo y no se corrigen bugs directamente en las ramas de release - Las funcionalidades se fusionan en estado desactivado usando flags, para mantener siempre el código actualizado
- Se mantiene
- GitHub Flow: se mantiene
- Commits
- Convenciones: normalmente se usa mucho la convención de Angular, aunque también se pueden usar emojis si el equipo lo acuerda
- Unidad: idealmente deben hacerse en la unidad mínima posible, pero aun así el equipo debe acordar qué considera como unidad mínima
- Se pueden subdividir los cambios por
hunkpara hacerstaging - Resulta cómodo si se pueden comparar cambios a nivel de delta
- Se pueden subdividir los cambios por
- Commits especulativos y registro lineal: una forma de hacer commits frecuentes para mantener el contexto sin dejar de conservar un historial lineal
- Guardar el trabajo cada vez que haga falta conservarlo, como con
stasho al probar prototipos - Hacer
checkoutdonde sea necesario, seguir haciendo commits y luego mantener el historial lineal conrebase - Es útil usar la herramienta git-branchless
git sl: rastrea ramas anónimas y visualiza muy bien el historial de commitsgit prevygit next: facilitan hacer checkout a la unidad anterior o siguientegit sync: hace rebase sobreMaingit move: permite mover commits al lugar deseadogit restack: restaura el orden del historial si se rompe conrebaseocommit --amendgit undo: permite deshacer
- Guardar el trabajo cada vez que haga falta conservarlo, como con
- Fusión
- Patch Stack: una forma de revisar cambios dividiéndolos como funcionalidad [1/3], funcionalidad [2/3], funcionalidad [3/3]
- Conflictos de primera clase: Jujutsu, compatible con Git, registra los conflictos en los commits, por lo que es menos probable que vuelva a aparecer más adelante un conflicto ya resuelto
- 3 Way Diff: en el caso de Jujusu, cuando ocurre un conflicto muestra
Base-Ourscomo diff yTheirscomo snapshot, lo que resulta intuitivo. Aun así, puede haber necesidad de ver el resaltado de sintaxis del IDE/editor o un diffBase-Their - Conflictos binarios: cuando Git encuentra un conflicto en archivos binarios simplemente lo deja en manos del usuario, pero personalmente se creó una herramienta simple para generar archivos
BaseyTheir - Parches y correo: introducción a una forma de fusión más tradicional(?)
git request-pulles un comando para generar un pull request- Con
git send-mailse pueden enviar parches por correo y congit amse pueden aplicar
- Otros métodos de gestión
- Worktree: el historial de Git se comparte, pero se pueden hacer varios checkouts de archivos de trabajo en distintos lugares, como si fueran ramas de SVN, para avanzar en varias tareas al mismo tiempo
- Git LFS: una forma de gestionar archivos de gran tamaño
- Clonado parcial y checkout parcial: permiten clonar solo una parte para reducir el tiempo de descarga, y hacer checkout parcial para trabajar solo con los directorios necesarios
- Scalar: facilita la gestión de repositorios enormes gracias a los esfuerzos de Microsoft
Aún no hay comentarios.