Git es un sistema de control de versiones distribuido que almacena snapshots de archivos en lugar de diferencias, lo que lo hace rápido y de tamaño reducido. Permite establecer un repositorio central mientras garantiza la integridad. A diferencia de SVN, Git optimiza el espacio al almacenar toda la historia en cada clon, acelerando las tareas. Git ofrece beneficios como facilitar revisiones tempranas, permitir experimentación sin afectar a otros, y mejorar la integración con herramientas. Requiere definir un flujo de trabajo formal para
2. ¿Qué es Git?
•Sistema de control de versiones completamente distribuido
• Permite el establecimiento de un repositorio central
•Orientado a guardar snapshots en lugar de diferencias entre
archivos
•Construido para garantizar la integridad
•Rápido y tamaño reducido entre sus principales ventajas
4. Tamaño
•Git, a comparación de SVN, optimiza el espacio utilizado.
• La carpeta Git cuenta con toda la historia de master, todos los branches
y tags.
• La carpeta SVN únicamente contiene la última revisión del trunk, última
revisión de cada branch y todos los tags.
•Consecuentemente clonar un repositorio, con toda la historia, es
sumamente rápido.
•Por ejemplo:
6. Beneficios de Git para el desarrollo (1)
•Facilita y forza las inspecciones, mediante Merge Requests.
• Permite tener inspecciones tempranas con retroalimentación mediante
comentarios
• Inspecciones de integración de cambios
• Puede proteger contra escritura, basada en roles, en master.
•Permite naturalmente la experimentación y creatividad
• Implementar 2 o más posibles soluciones y compararlas es muy
sencillo.
• No afecta al resto de colaboradores.
• El control de versiones se mantiene.
• Es posible trabajar en más de 1 requerimiento a la vez:
• Permite la corrección de un defecto en producción cuando ya se estaba
trabajando en un nuevo requerimiento
• Evita tener múltiples workspaces, 1 para cada branch como se hace en
svn, mediante el cambio (switch) entre branches.
7. Beneficios de Git para el desarrollo (2)
• Ofrece más herramientas para hacer las integraciones (merge)
más sencillas y confiables
• Cuenta con varios algoritmos para realizar las integraciones.
• En caso de conflicto, es necesario realizar un nuevo commit con la
solución del conflicto. En svn esto puede ser omitido y ocasionar
perdida de información.
• Cada repositorio clonado cuenta con toda la historia. Por lo tanto
hacer un diff o ver todos los cambios de un punto a otro es local y
por ende más rápido.
• Permite una mejor interoperabilidad con CI, CD o Issue
Management
• Mediante la ejecución de la IC antes y después de un merge en master.
• Ejecución de tareas en go.cd o lisa para lograr el despliegue en
desarrollo por ejemplo.
8. Beneficios de Git para el desarrollo (3)
• Trabajar un requerimiento en colaboración con 2 o más
desarrolladores es posible sin afectar al resto.
• Facilita la comprensión del estado actual e historia de un
proyecto mediante una vista gráfica de los branches y commits.
• Centraliza el código y la documentación de un proyecto en un
solo lugar.
• Mediante el uso de Markdown (Texto plano convertido a HTML)
• Wiki para cada proyecto. Diagramas de arquitectura, guías de
instalación, FAQ pueden ser consultados.
• Facilita la integración temprana de cambios en master.
• A diferencia de integrar al final, como se hace actualmente, el tiempo
de integración y pruebas de regresión se reduce.
• Interface web
• Permite la consulta en línea de código sin descargar el código
localmente, administración, acceso a la documentación, entre otros.
9. Desventajas de Git
• Curva de aprendizaje
• Es lenta y requiere de experimentación.
• Requiere de un cambio de paradigma al trabajar con branches.
• Herramientas visuales no implementan toda la definición de Git. Esto
provoca que se requiera un mayor uso de la consola/terminal lo cual
puede ser difícil para quienes no están acostumbrada a ella.
• Requiere de un proceso o workflow formal.
• En caso contrario la administración de branches se puede volver
caótico.
• No contar con un flujo de trabajo puede provocar problemas de
despliegue e integración en ambientes de prueba.
10. Beneficios de Git para áreas ajenas al desarrollo (1)
• Mayor control sobre los proyectos nuevos y existentes
• A diferencia de SVN donde cualquiera puede crear lo que quiera dentro
de una carpeta con permisos
• Permite la administración de grupos
• Ligar usuarios y proyectos a grupos es posible.
• Asignar roles dentro de un grupo también es posible.
• Mejora la seguridad mediante un mejor control de usuarios
• Permite el cambio de contraseñas periódicamente
• Es posible integrar con Active Directory, no permitiendo el acceso a
quien ya no labora en la empresa inmediatamente.
• Es posible desactivar cuentas inactivas por un periodo de tiempo.
11. Beneficios de Git para áreas ajenas al desarrollo (2)
• Control de versiones (hospedaje) para proyectos de
administración de configuraciones (LLM-CM)
• Documentos como ERS o definiciones de RETO podrían ser colocadas
en Markdown o Wiki, permitiendo la edición en línea.
• Mejor comunicación sobre notificaciones de mantenimiento o
algún otro mensaje mediante mensajes de difusión en el servidor
Git.
12. Que no hace Git
• No mejora la excelencia técnica pero sí el proceso de desarrollo
• Se requiere trabajar con los desarrolladores para lograr esa excelencia
técnica.
• No garantiza que la deuda técnica se reduzca
• De igual modo, la herramienta o el proceso requiere también de
entrenamiento, cambios culturales, de actitud, pasión por el detalle para
lograrlo.
• Es probable que se reduzca la deuda técnica pero depende de la
calidad de las inspecciones. Depende aún más del profesionalismo,
pragmatismo y orgullo (generado por el producto entregado) de los
desarrolladores.
• No establece un proceso o flujo de trabajo
• Se requiere de capacitar y dar seguimiento, al menos en la etapa de
migración.
• En caso contrario, pasaría lo que ocurrió con el proyecto sitiobmv en su
migración hacia Git.
13. Siguientes acciones
• Impulsar integraciones continuas y prontas.
• Comenzar a realizar ingeniería de requerimientos
• Indicar a control de cambios el nuevo proceso de liberación
• Realizar y ejecutar un plan para la transformación del personal
de Bursatec para convertirlos en profesionales del software.
• Implementar, ya sea con lisa o con go.cd, la primera versión de
entregas continuas (Continuous Delivery)
• Formalizar los checklist utilizados durante los Merge Request
• Establecer los lineamientos de documentación de un proyecto
• Establecer los lineamientos de pruebas unitarias
• Medir la efectividad de las medidas aplicadas. Deuda técnica,
tamaño, tiempo, etc.
• Ligar a Git herramientas para mejorar la seguridad del código,
como Fortify, Peach Fuzzer.
• Capacitar a infraestructura para el mantenimiento a Git.