Qué es Git SCM

Qué es Git SCM
Qué es Git SCM

Qué es Git SCM – Historia

El nacimiento de GIT está fuertemente ligado al sistema operativo Linux, no en vano fue creado por Linus Torvalds conocido por iniciar y mantener el desarrollo del kernel del sistema operativo Linux, basándose en el sistema operativo libre Minix, algunas herramientas y  utilidades, y utilizando para la compilación los compiladores desarrollados por el proyecto GNU.

Tomando esto como punto de partida, entre los años 1991 a 2002, la mayor parte de los cambios del mantenimiento del núcleo de Linux se pasaron en forma de parches y archivos.

En el año 2002, la gente que formaba parte del proyecto del núcleo de Linux comenzó a utilizar un DVCS de pago  llamado BitKeeper.

En 2005 BitKeeper dejó de ser ofrecida gratuitamente y debido a esto a la comunidad de desarrollo de Linux se planteo desarrollar su propia herramienta, tomando como punto de partida la forma de funcionamiento de BitKeeper, pero aplicando todas las lecciones aprendidas durante su uso, con el propósito de crear una mejor herramienta,  Algunos de los objetivos del nuevo sistema fueron los siguientes:

  • Velocidad
  • Diseño sencillo
  • Fuerte apoyo al desarrollo no lineal (miles de ramas paralelas)
  • Completamente distribuido
  • Capaz de manejar grandes proyectos de manera eficiente.

El mantenimiento del software Git pasó en 2009 ha ser supervisado por Junio Hamano, quien recibe contribuciones al código de alrededor de 280 programadores.

Qué es Git SCM

Git es un control de versiones distribuido, lo que significa que una herramienta que lleva un control de las modificaciones o versiones realizadas en el tiempo sobre un archivo o conjunto de archivos, para posteriormente poder recuperar una modificación o versión en concreto.

Además de esta función principal con Git podremos además:

  • Revertir los archivos a un estado anterior.
  • Revertir el estado de todo un proyecto de nuevo a un estado anterior.
  • Comparar cambios realizados sobre un archivo o conjunto de archivos con el tiempo.
  • Ver quién modificó por última vez algo que podría estar causando un problema, quién introdujo un problema y cuándo.

Git se pensó como un motor de bajo nivel sobre el cual otros pudieran escribir la interfaz de usuario o front end como Cogito o StGIT.  Sin embargo, Git se ha convertido desde entonces en un sistema de control de versiones con funcionalidad plena. Hay algunos proyectos de mucha relevancia que ya usan Git, en particular, el grupo de programación del núcleo Linux.

Qué es Git – Control de versiones distribuido

Git es un DVCS (Distributed Version Control Systems), en este tipo de herramientas los clientes no se limitan a ver la última instantánea de los archivos, en los sistemas de control de versiones distribuidos, los clientes contienen todo el repositorio. Es por esto que si un servidor centralizado cae y existen diversos clientes distribuidos que colaboran a través de él, cualquiera de los repositorios del cliente puede copiarse de nuevo en el servidor para restaurarlo, cada cliente es una copia de seguridad completa de todos los datos del repositorio.

Debido a esta naturaleza de sistema distribuido, Git permite configurar varios tipos de flujos de trabajo que no son posibles en sistemas centralizados, como modelos jerárquicos.

Qué es Git – Conceptos fundamentales

Cómo se almacena la información Git

Git almacena sus datos como un conjunto de instantáneas de un mini sistema de archivos, cada vez que confirmamos un cambio, o guardamos el estado de nuestro proyecto en Git, se realiza una instantánea del aspecto de todos los archivos que tenemos en ese momento en nuestro proyecto, y se guarda una referencia a esa instantánea.
Si los archivos no se han modificado y para optimizar en la medida de lo posible los recursos, Git no almacena el archivo de nuevo, se crea un enlace al archivo anterior que ya tiene registrado.

A modo de cultura general diremos que la mayoría de sistemas de control de versiones como por ejemplo Subversión, almacenan la información como un conjunto de archivos y las modificaciones hechas sobre cada uno de ellos a lo largo de la vida del proyecto.

Con Git no es necesario estar en red

No es necesario estar conectado ni una red corporativa, ni a internet para poder trabajar con Git ya que la mayoría de las operaciones en Git sólo necesitan archivos y recursos locales para operar. Eso es posible ya que disponemos de toda toda la historia del proyecto de manera local, esto además posibilita que la ejecución de las operaciones sea muy rápida.

Git SCM comprueba la integridad

En Git toda operación es verificada antes de ser almacenada mediante una suma de comprobación o checksum, a partir de ese momento la operación pasará a identificarse mediante ese checksum. Esto significa que no es posible modificar el contenido de un archivo o directorio sin que Git lo detecte.

El mecanismo que usa Git para generar el checksum se conoce como hash SHA-1, este mecanismo utiliza una cadena de 40 caracteres hexadecimales (0-9 y a-f), y se calcula en base a los contenidos del archivo o la estructura de los directorios incluidos en la operación.

Los tres estados de Git

Git SCM trabaja con tres estados principales en los que se pueden encontrar nuestros archivos: modificado (modified), preparado (staged), y confirmado (committed).

  • Modificado significa que hemos modificado el archivo pero que todavía no lo hemos confirmado en nustra base de datos local.
  • Preparado significa que hemos marcado un archivo modificado en su versión actual para entregarlo en nuestra próxima confirmación.
  • Confirmado indica que los datos están almacenados de manera segura en nuestra base de datos local.

Estos tres estados están relacionados con las tres secciones principales de un proyecto de Git:

  • El directorio de trabajo (working directory): Es una copia de una versión del proyecto que se corresponderá con la que estamos trabajando en ese momento. Estos archivos se obtienen de la base de datos comprimida en el directorio de Git, y se colocan en el disco local para que los podamos utilizar.
  • El área de preparación (staging area): Es un archivo generalmente contenido en el directorio de Git, que almacena información sobre lo que va a ir en nuestra próxima confirmación, al área de confirmación también se le conoce índice.
  • El directorio de Git (Git directory): Este directorio es donde Git almacena los metadatos y la base de datos de objetos de nuestro proyecto. Es la parte más importante de Git, y es lo que se copia cuando clonamos un repositorio desde otro ordenador.

A continuación tenemos una imagen que ilustra lo que acabaos de explicar.

Qué es Git - Los tres estados
Qué es Git – Los tres estados

Qué es Git – Flujo de trabajo

El flujo de trabajo básico en Git es el siguiente:

  • Primero modificamos unos o varios archivos en nuestro directorio de trabajo (working directory).
  • Tras modificar los archivos, preparamos los archivos añadiéndolos a nuestra área de preparación (staging area).
  • Para terminar confirmamos los cambios, esto hace que que Git tome los archivos del área de preparación, y los almacene como instantáneas de manera permanente en nuestro directorio de Git.