Git (I). Introducción. Como Funciona

Muy buenas lector. Este es un primer post de una serie completa que quiro estrenar sobre Git, un sistema de control de versiones libre y de código abierto, desarrollado por Linus Torvalds en 2007, y que a día de hoy se ha convertiro en todo un estándar en el ámbito de la programación y el desarrollo.

Ésta es la guía de iniciación, en la que te haré una breve introdicción a Git y a sus características principales, para pasar a la parte más práctica y técnica en los siguientes posts de esta serie. Personalmente me he iniciado hace poco a Git, por lo que en cierto modo estaremos haciendo el viaje juntos.

Tabla de contenidos:

  1. ¿Qué es Git? Un poco de contexto
  2. ¿Como funciona Git? Principales características
    1. Repositorios
    2. Sistema de ramificaciones
    3. Arquitectura distribuida
  3. Plataformas cloud colaborativas que trabajan con Git
    1. GitHub
    2. GitLab
    3. Bitbucket
  4. Continuación

¿Qué es Git? Un Poco de Contexto

Git Logo

Git es un software de control de versiones distribuido, de software libre y código abierto, que fué desarrollado por Linus Torvalds, el mismo creador del kernel Linux. De hecho, nació de su propia frustración a la hora de utilizar los sistemas de control de versiones que había hasta el momento, a la hora trabajar con el desarrollo de Linux.

La primera versión de Git se lanzó en 2007, y en esos pocos años, se ha convertido en un estándar y referente absoluto, siendo con una gran diferencia, el sistema de control de versiones más utilizado a nivel mundial, tanto para pequeños desarrollos, como por los proyectos mas grandes e importantes que puedan esicstir a día de hoy, como son el propio kernel Linux.

Hoy día, en cualquier proyecto minimamente grande, es practicamente inconcevible no utilizar Git, ya sea de forma local, o, en caso que de colaboren varios desarrolladores, mediante alguna plataforma cloud colaborativa como GitHub, GitLab o Bitbucket.

Git es usado desde en desarrollos pequeños entre una o pocas personas, hasta en proyectos de la talla del propio kernel Linux, Android, Bitcoin, o GNOME, entre otros muchos. En estos casos, lo puede comprobar fácilmente porque todos son proyectos de código abierto, y su código esta disponible en alguna de las plataformas que he mencionado antes (mayormente en GitHub).

Aun así, se sabe que compañías como Google, Microsoft, Twitter, o Netflix, solo por citar algunas de las más importantes, también utilizan Git para el desarrollo de sus proyectos, aunque en este caso sea a nivel interno y el código obviamente no este disponible de forma pública en GitHub.

¿Como Funciona Git? Principales Características

Git es un software que cualquier persona se puede instalar de forma local en su equipo. Está disponible tanto para Windows como para macOS y GNU/Linux (de hecho, es muy probable que si utilizas GNU/Linux tu distribución ya lo traiga preinstalado).

Una vez instalado, la forma de interactuar con Git es a través de la consola, aunque para los usuarios que no se sienten comodos trabajando desde la terminal, también existen clientes gráficos.

Git está pensado para ser un control de versiones distribuido, en el que varias personas puedan colaborar en el mismo proyecto, de forma ágil, eficiente y con la minima fricción. Por ello, viene con una serie de características que lo han hecho único y diferente de cualquier sistema de los que había previo a su aparición.

Repositorios

Git se organiza en repositorios, que basicamente constituyen la unidad de almacenamiento que contiene todos los ficheros de código de tu proyecto, ademas de un subdirectorio oculto denominado .git, que es el que contiene los ficheros de configuración de Git, y va generando el regitro de cambios. Git distingue entre dos tipos de repositorios, los repositorios locales y los repositorios remotos.

Un repositorio local es, en esencia, un directorio local de tu sistema, pero que Git a configurado como repositorio, implicando esto que, aunque a simple vista se trata de un directorio como cualquier otro, contiene una fichero de configuración oculto que permite a Git toda la programación quemantener un histórico de todos los cambios que se han hecho en todos los ficheros contenidos en él.

Esto solo es perfecto para proyectos gestionados por una sola persona, pero en proyectos más grandes en los que colaboran varias personas, se hace necesario mantener un repositorio en un lugar común, al que tengan acceso todas las personas que colaboran con el proyecto. Esto da pie a los repositorios remotos.

Un repositorio remoto es un repositorios almacenados en un sitio al que pueden acceder, de forma remota, todos los participantes del proyecto. Este sitio puede ser desde un servidor dentro de una red privada o Intranet corporativa, hasta un espacio en cualquier plataforma cloud colaborativa que trabaje con Git, como verás un poco más adelante en este post.

Un repositorio de Git se puede crear de cero partiendo de un directorio local de tu equipo, o bien clonándolo de un repositorio remoto, ya sea en una red privada (sobretodo para proyectos de código cerrado), o alojado en alguna de las plataformas colavorativas

Sistema de Ramificaciones

De entrada, una de las características mas destacables es su sistema de ramificaciones, o branches, que permite basicamente que un proyecto se pueda bifurcar en diferentes ramas para que coexistan varias líneas de desarrollo en paralelo, que luego se pueden volver a unir cuando se precise.

De esta manera, puedes jugar con las ramificaciones para, por ejemplo, poder establecer una linea principal de desarrollo que sea la que vaya a producción, y líneas paralelas para trabajar en funcionalidades concretas, sin afectar o «ensuciar» a la rama principal. Mas tarde, cuando la funcionalidad con la que se trabaje en una rama en paralelo esté preparada para aplicarse en producción, tan solo hay que hacer un merge con la rama principal.

Como detalle, Git, por convenio, siempre denomina master a la rama principal (aunque esto es algo que puede ser cambiado facilmente por el usuario), mientras que las ramas adicionales que se pueden denominar como cada usuario desee.

Arquitectura Distribuida

Una de las claves de Git es que esta concebido para que funcione de forma distribuida, de modo que muchos usuarios, cada uno desde sus propios equipos, puedan trabajar en un mismo proyecto, y sin practicamente fricción, algo realmente díficil de conseguir en este tipo de arquitecturas.

La clave aquí es que cada usuario puede trabajar con su propio repositorio local, pero a la vez mantener una conexion remota con un repositorio común. Esa conexión remota es la que permite que las distintas copias locales de cada uno de los usuarios queden sincronizadas con el repositorio remoto. Un usuario puede subir los ultimos cambios de su copia local al repositorio remoto, y a la vez actualizar su copia local con los ultimos cambios que hayan habido en el repositorio remoto.

Esto ultimo, unido al sistema de ramificaciones, permite que se puedan establecer multitud de flujos de trabajo distintos, en función de la idiosincracia de cada proyecto y de las personas que participan en él.

Así pues, en proyectos pequeños o medianos, un enfoque de trabajo posible puede ser el que, por ejemplo, cada participante trabaje sus cambios en su copia local en una rama independiente, y, en el momento de subir los cambios de esta rama en el repositorio remoto, alguien se encarge de hacer el merge de esta rama con la rama principal, teniendo en cuenta que casa que, al en proyectos en los que colaboráis varios, puede ser mas oportuno que cada

Esta operativa de trabajo, que para pocos participantes puede funcionar bien, en proyectos mas grandes puede generar fricciones, ya que al hacer el merge entre ramas siempre se pueden presentar conflictos, sobretodo si las dos ramas han ido evolucionando en paralelo.

En estos casos, puede ser necesario incorporar una jerarquia mas vertical en el proyecto, y establecer mas controles a la hora de actualizar el repositorio remoto (y especialmente su rama principal).

Esto puede suponer, por ejemplo, incorporar la figura de una persona que se encarga de validar e integrar los diferentes cambios que van publicando cada uno de los usuarios en sus ramas independientes. Esta filosofía la puedes extender a más niveles, estableciendo una completa jerarquia de roles sobre diferentes subpartes del proyecto.

Plataformas Cloud Colaborativas que Usan Git

Hasta ahora me he centrado en explicar el funcionamiento y características de Git como pieza de software, pero ahora me centraré en las plataformas cloud colaborativas que permiten el alojamiento de los repositorios remotos.

Aunque un repositorio remoto de Git, como he comentado, puede estar alojado en un servidor dentro de una red privada o Intranet corporativa, a día de hoy, es muy común trabajar con plataformas como GitHub, GitLab o Bitbucket, que vienen con toda la funcionalidad de Git integrada, y, en algunos casos, incluso incluyen funcionalidades adicionales, como es el caso de los Pull Requests y los Forks.

GitHub

GitHub

GitHub es una plataforma de desarrollo colaborativa nacida en el año 2008 que opera bajo la compañía GitHub, Inc., hoy propiedad de Microsoft. GitHub que ofrece alojamiento para el código fuente de cualquier proyecto, y permite que multiples colaboradores puedan trabajar conjuntamente en un mismo proyecto, o partes de él, gracias al uso de Git como sistema de control de versiones.

Desde sus inicios se ha hecho enormemente popular entre desarrolladores, y es a día de hoy la plataforma más importante y conocida. Para que te hagas una idea de su importancia, alrededor de 23 millones de desarrolladores están en GitHub, y alberga más de 200 millones de repositorios.

GitHub es la plataforma más popular entre desarrolladores de proyectos open source, de hecho, gran parte de su marketing se basa en este hecho, y de ahí el lema «Where open source communities live». Para citarse solo unos pocos ejemplos, el código fuente de proyectos como Linux, Tensorflow, JavaScript, React o Go está alojado en GitHub.

Aparte de toda la funcionalidad ya propia de Git, GitHub añade algunas funciones adicionales, que no son parte de Git, como son los Pull Requests o los Forks, dos funciones enormemente utilizadas, sobretodo en proyectos grandes en donde colaboran muchos desarrolladores.

GitLab

GitLab

GitLab es a día de hoy el principal competidor de GitHub. Es un software colaborativo ofrecido por GitLab, Inc., una compañía que funciona con un modelo denominado open core, en el que cada usuario puede contribuir a la compañía a través de su modelo de suscripción. A diferencia de GitHub, que funciona unicamente como servicio, en GitLab puede optar por utilizar GitLab SaaS, o por operar GitLab desde tu propio servidor.

Para utilizar GitLab SaaS unicamente necesitas crear una cuenta en la plataforma, al igual que GitHub, y empezar a trabajar. La interfaz y el funcionamiento de la plataforma es sumamente parecido a GitHub.

Si quieres tener más control de la plataforma, puedes utilizar GitLab en modalidad autoalojada, operando tu propia instancia. En este caso puedes elegir entre dos paquetes, GitLab CE, la edición comunitaria, enteramente Open Source y distribuido bajo una licencia MIT, y GitLab EE, la edición empresarial, que viene con características extendidas y se ofrece bajo una licencia propietaria.

Bitbucket

Bitbucket

Bitbucket es un servicio de alojamiento para el desarrollo de proyectos colaborativos en Git, lanzado en el año 2008, y que actualmente es propiedad de la compañía Atlassian, conocida compañía por servicios como Jira, Confluence o Trello.

La interfaz web y su funcionalidad son bastante parecidas a GitHub. Ofrece también la función de Pull Requests, y se beneficia en este caso de una perfecta integración con Jira, al ser ambos servicios de la misma compañía.

No es una plataforma de la que se le conozcan tantos proyectos, ya que a nivel de popularidad la comunidad open source parece mucho más volcada a GitHub y GitLab. Aun así, para compañías y grupos de trabajo que utilizen herramientas como Jira, que no son precisamente pocas, Bitbucket les puede venir perfecto.

Continuación

Antes de finalizar, te quiero recordar que esta este post es solo el pistoletazo de salida de una completa serie sobre Git, por lo que próximamente iré copiando debajo los enlaces al resto de posts que irán conformando esta serie.

  1. Git (I). Introducción
  2. Git (II). Instalación y configuración inicial.

¡Un saludo y hasta la próxima!

Categorías GitEtiquetas

Deja una respuesta

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

A %d blogueros les gusta esto:
search previous next tag category expand menu location phone mail time cart zoom edit close