Disclaimer: No voy a poner una sola línea de código o comandos de la consola. No haré nada con la consola en este post, la idea es presentar Git, sus ventajas y la idea general de como usarlo, para una explicación técnica, ver el sitio oficial de git.
Tenemos tres días para entregar el proyecto final que estamos haciendo en Java, el mejor lenguaje del universo y somos dos personas haciendo el trabajo del equipo completo, clásico de ESCOM. Podemos hacer el proyecto, desde nuestras casas y hablar por Skype para saber que está haciendo cada quien pero no, tenemos mucho código que hacer y estar bien coordinados, nos estamos pasando cada actualización a un archivo por una memoria USB.
Después de haber pasado 3 horas tratando de implementar un requisito funcional, pasamos todo a una memoria, actualizamos el código de las dos computadoras con las que estamos trabajando y al correrlo el programa no funciona, descubrimos que cometimos un muy mal error: pusimos el código atrasado en la memoria, no el último.
Por nosotros cometimos un error me refiero a que yo sincronicé mal que carpeta tenia los archivos buenos y al actualizar destruí el progreso. Regresar a la fase avanzada no fue tan difícil con el código fresco.
No estoy seguro de cuándo y por qué lo empecé a utilizar pero conocía GitHub mucho tiempo atrás, solo que no me pareció necesario tener nada ahí, no le vi utilidad hasta ese momento.
Git es un sistema que te permite llevar un control de los cambios a un proyecto de desarrollo a nivel de código.
Es particularmente útil cuando:
El repo o repositorio lo podemos entender básicamente como el proyecto.
El proyecto alberga los archivos y una carpeta oculta .git que lleva una lista de los cambios que ha habido en el proyecto.
El repositorio puede estar almacenado localmente o en un servidor.
Cada proyecto tiene una rama principal, la rama principal se llama master y es básicamente una serie de cambios en el proyecto.
Podemos crear ramas a partir de otras ramas y también, mezclar diferentes ramas aunque con limitaciones.
Las ramas son útiles porque nos permiten hacer cambios al proyecto conservando el código que sabemos que ya funciona, así, si queremos probar una nueva funcionalidad, podemos hacerlo en una rama distinta al master y si los cambios nos convencen, juntar las ramas. A esta acción se le llama merge.
Si los cambios no nos convencen podemos seguir modificando cosas o simplemente dejarlos ir, nuestra rama importante es el master.
Es importante notar que a veces, juntar ramas va a llevar a problemas por los archivos, por cambios en los archivos en diferentes tiempos los cuales muchas veces se tiene que resolver manualmente, es decir, el usuario tiene que elegir que código o archivos son los que se conservan.
Cada que hacemos cambios, es buena práctica llevar un control de lo que hacemos, otras veces es bueno guardar checkpoints en el programa cuando implementamos cosas chicas o cosas a las que tal vez, en el futuro queramos regresar.
El commit es una acción que nos permite hacer eso, guardar los cambios actuales al proyecto.
Al hacer un commit tenemos que seleccionar un título, de preferencia descriptivo pero además, podemos colocar una descripción más detallada de los cambios que hicimos. El commit al guardarse muestra los archivos nuevos, los archivos eliminados, las modificaciones en los archivos con las diferencias entre las líneas de código entre la versión vieja y la versión nueva, entre otros.
Es importante aclarar que los commits se hacen en la rama en la que estamos trabajando.
Aunque esto se puede hacer cuando trabajamos solos, es muy agradable usar Git en un proyecto.
Un repositorio se puede almacenar en un servidor y al hacer un commit, podemos enviar la información contenida en el commit hacia el servidor haciendo un push.
Al haber hecho el push, las demás personas con acceso al repositorio pueden sincronizar el proyecto, es decir, descargar el commit a su repositorio y poder trabajar con los cambios que hicimos.
Git se maneja con un sistema de seguridad que nos permite estar seguros de que los cambios se han registrado, esto nos ayuda a verificar la integridad de nuestro sistema de archivos.
Git puede cambiar el sistema de archivos. Podemos viajar en el tiempo y ver archivos o versiones de archivos viejas, recuperar cosas y después volver al futuro.
Yo no confío en las personas que hacen lo que yo hacía, enviarse los cambios en un archivo por Facebook, email o una USB. Hacerlo implica una desorganización del equipo de desarrollo que puede tener graves consecuencias, especialmente cuando el código que se cambia es enviado directamente a producción.
Esto solamente fue una idea conceptual de lo que es Git y las situaciones en las que podemos usarlo. Existen varias soluciones para tener repositorios sin necesidad de crear nuestro propio servidor, las que yo he usado son:
BitBucket te permite tener repositorios privados ilimitados para hasta 5 personas gratis. GitHub no te da repositorios privados gratuitos a menos que seas estudiante.
Cada uno cuenta con aplicaciones de escritorio para que no tengamos la necesidad de lidiar con comandos de la consola a menos que sea muy necesario, las aplicaciones cuentan con interfaces de usuario que nos permiten realizar las operaciones de las que hablé en este post.
Git es poderoso y además, es profesional.
Publicado por Julio Montaño el 28/Jun/2014.