¿Qué son Git y GitHub?
Antes de responder a esta pregunta hay que entender el concepto de Sistema de Control de Versiones. ¿Qué es y para qué sirve?
Sea lo que sea a lo que te dediques, cuando llevas a cabo un proyecto, ya sea un documento, una presentación, escribes un libro, desarrollas una aplicación o creas un juego, el proceso no es inmediato ni directo. Sabes cuando empiezas, pero no cuando acabas. Y una vez terminado, cuando lo veas, lo corregirás y lo modificarás, pero no una vez, ni dos, lo vas a modificar y corregir en repetidas ocasiones.
Esto de las correcciones y revisiones será porque detectas errores. Desde una falta de ortografía en la redacción de un artículo, pasando por una diapositiva de la presentación que no tiene ningún sentido, o un bug en el juego. O bien, porque quieres modificar una parte del mismo para mejorarla. Por ejemplo, porque el libro que estás escribiendo es sobre una determinada aplicación, que se ha actualizado y han liberado una nueva versión con nuevas características.
Llegados a este punto, el problema lo encontrarás cuando quieras volver atrás. Por ejemplo, una vez has introducido una modificación en tu libro, puede ser que no te guste como ha quedado y quieras deshacer los cambios. Si son pocos cambios, con deshacer tienes suficiente, pero ¿qué sucede cuando has introducido cambios sustanciales?
¿Cómo podemos regresar al pasado? Para esto es necesario llevar un control de versiones.
Sistemas de Control de Versiones
ara poder gestionar todos los cambios que se producen en nuestro proyecto, tenemos que recurrir a los sistemas de control de versiones. Un sistema de control de versiones no es más que un registro histórico de los cambios producidos.
Sin embargo, existen diferentes modalidades de sistemas de control de versiones, en función de su funcionamiento.
Sistemas de Control de Versiones Locales
Durante la ejecución del proyecto es fundamental registrar los cambios que se van produciendo. Este registro de cambios te puede ayudar a volver a una versión anterior, en el caso de que la actual no sea de tu agrado, o a comprender por qué tu proyecto se encuentra donde se encuentra actualmente. Es de gran utilidad porque nos da un gran abanico de posibilidades como:
- Volver a una versión anterior de un documento del proyecto
- Volver a una versión anterior de todo el proyecto.
- Comparar los cambios entre dos versiones
Esto se puede resolver haciendo copias de nuestro proyecto. Es decir, cada vez que cambiamos un archivo, ya sea un documento, una imagen o lo que sea, creamos una nueva copia del proyecto.
En pequeños proyectos, lo que hago es exactamente esto. Por ejemplo, cada vez que realizo una modificación de un plano de un proyecto, creo una copia del mismo. Sobre esta copia hago las modificaciones que necesito, y genero una nueva versión. Ahora bien, aunque la mayor parte de las veces registro la fecha del cambio, no siempre, o más bien, casi nunca, registro a qué se han debido los cambios. En otras ocasiones, también me ha sucedido que mi modificación la he hecho no sobre la última versión, sino sobre una previa.
Efectivamente, esto es un problema, y es que en un momento podemos estar trabajando en la versión que no toca o simplemente borrar la última versión, o no guardar una versión anterior.
Para resolver este primer problema, se desarrollaron los Sistemas de Control de Versiones Locales. Que no es, ni más ni menos, que una base de datos donde se registran cada uno de los cambios que se producen en nuestro proyecto.
Sistemas de Control de Versiones Centralizado
Pasemos al siguiente nivel. ¿Qué pasa cuando trabajáis varios en el mismo proyecto? ¿Cuando sois varios los que intervenís en el proyecto? Cada uno de vosotros irá realizando cambios en el proyecto, de forma simultánea (o no). Si en el caso anterior ya era importante registrar los cambios, imagínate ahora. En este caso,
- Podemos averiguar quién ha introducido un determinado cambio
- Quién a resuelto un problema o lo ha creado
Habrás comprendido claramente por qué es importante llevar un sistema de control de versiones en un grupo. Si en ocasiones, cuando trabajo solo, me equivoco y no parto de la última versión para realizar mis modificaciones, con varios es misión, prácticamente, imposible.
Pero aún nos queda un nivel más. ¿Qué pasa cuando cada uno de los miembrosque trabajan en el proyecto está en una parte del mundo?
Sistemas de Control de Versiones Distribuidos
Aquí entramos en los trabajos colaborativos. Varios miembros trabajando sobre un mismo proyecto, y deslocalizados, es decir, no todos se encuentran en la misma oficina (por ejemplo).
A priori, la solución es tan sencilla como tener el proyecto en la nube, ya sea en un servicio propio o en un servicio ajeno. Cuando necesitamos realizar una modificación del proyecto, descargamos la última versión de lo que queremos modificar, lo actualizamos y lo volvemos a subir. Esto tiene varios problemas:
- Estás limitado por el ancho de banda de tu conexión. Si cada vez que tienes que realizar una modificación tienes que mirar en la nube la última versión, descargarla, hacer las modificaciones, volverla a subir, y tu conexión a internet es tremendamente lenta, tu trabajo será muy lento.
- ¿Qué sucede cuando otro realiza modificaciones a la vez que tú? ¿Cuando dos estáis trabajando a la vez sobre un mismo archivo? ¿Cuál es la versión válida?
La solución a todo esto son los sistemas de Control de Versiones Distribuidos. Esto no es más que cada miembro del grupo tiene una copia local del control de versiones. Es decir, una copia del historial de cambios que se han ido realizando.
Cada vez que realizamos una modificación en nuestra copia ésta se reporta a la copia principal, donde es gestionada convenientemente por el administradordel proyecto.
Te esperamos en la segunda parte del artículo en donde hablaremos mas acerca de estos temas, los cuales hoy en día son de vital importancia en el mundo de la tecnología.