[GIT] Introducción, Instalación

¿Qué es GIT?



Git es un software de control de versiones.
Un Sistema de control de versión debe permitir:
  • Almacenar todo el código fuente de un proyecto (de cualquier lenguaje) y los elementos adicionales que pueda contener (ej. archivos de texto, imágenes, iconos, sonidos, documentación, etc)
  • Realizar cambios sobre el todo proyecto: el código y sus elementos almacenados (ej. modificaciones parciales, añadir, borrar, renombrar o mover archivos).
  • LLevar un registro histórico de los estados en que el proyecto se encontraba al momento de ser fue almacenado, pudiendo obtener asi las distintas versiones por la que fue pasando.


Existen de 2 tipos de software de control de versiones:
  • Centralizados:
    • Existe un único repositorio de datos, se accede a través de la red
    • La comunicación/colaboración entre desarrolladores se lleva a cabo (forzosamente) utilizando el repositorio centralizado
    • Son fáciles de usar
    • Los modelos de trabajo son más restringidos

  • Distribuidos:
    • Existe un repositorio local, en cada pc como programdores trabajen sobre el proyecto, y además de otro remoto, en la nube.
    • La comunicación/colaboración entre programadores es más abierta.
    • Es un poco más difícil de usar
    • Los modelos de trabajo son flexibles
    • “Los branches/merges son más simples”

Git, es entonces un software de control de versiones distribuido o descentralizado.




Terminología

La mayor parte de los términos usados en git están en inglés, por si fuera poco no sólo al no saber su significado uno no puede deducirlo, pero aca en más hay que entenderlos y usarlos en su idioma de origen.
Repository (Repositorio) Es la fuente de datos. Es la carpeta y sub-carpetas donde se encuentran todos los archivos necesario para el proyecto.
Head (Cabeza) Versión actual del proyecto
blob (gota) Es la forma en que GIT almacena un archivo del repositorio.
Tree (árbol) Es una archivo propio de GIT que indica como se relacionan los blobs
Commit (Comprometer) Es la acción de comprometer los cambios realizados sobre el repositorio.
Branch (Rama) Son las distintas ramas en que se pueden separar los diferentes commits.
Merge (Unir) Es la acción de unir las ramas
Mater (Maestra-Principal) Es la rama principal, la que se crea por defecto. Se suele usar para contener la version estable estable del proyecto, sobre otras ramas se implementan modificaciones.
Trunk (Maletero) Localización dentro del repositorio que contiene la rama principal de desarrollo.
Pull (Traer) Trae una rama en particular alojada en un repositorio remoto.
Push (Tirar) Envía la rama actual a el repositorio remoto.
Clone (Clonar) Duplica un repositorio remoto para hacerlo local.
Fork (Bifurcar) Genera entre mis repositorios locales, algún repositorio remoto de alguien mas, como si lo estuviera clonando.


Estructura interna de GIT


La estructura de GIT se divide:
  • Working Directory: El directorio de nuestro proyecto.
  • Staging area/index: Es el área de ensayo, donde agregaremos cada uno de los nuevos archivos.
  • Commit: Es la accion de "guardar" sobre el directorio de trabajo, la estructura del staging index
  • Remote Repository: Es la nube, donde podremos o no, almacenar el repositorio.
A través de las diferentes acciones que iremos realizando, estas partes se irán comunicando.

  • Lo primero será crear el directorio de trabajo o tener acceder a uno.
  • Luego habrá que ir agregando las modificaciones al área de ensayo.
  • Posteriormente se comprometen los cambios
  • Y se puede actualizar estos cambios de la nueva versión a la nube, primeramente descargando el repositorio remoto a el local, para el caso de que existan diferencias que requieran la atención humana (Como por ejemplo decidir sobre que archivos quedarnos)
  • Luego podremos subir la ultima versión del proyecto a la nube (Esta vez sin conflictos)
  • De aqui en mas podremos intercambiar de ramas o restaurar los archivos del árbol de trabajo
  • Unificar ramas, gralmente cuando la tarea que derivó en separar ha sido cumplida.




Para GIT cada acción de comprometer los cambios(git commit) se traduce como la codificación de cada archivo a un cógido hexadecimal de 40 dígitos, el cual actuará como un identificador para para dicho archivo. En caso de tener 2 archivos iguales el identificador será identico. Este Archivo para GIT será conocido como Blob.
A su vez cada blob esta ubicado a nivel directorio con toda su metdata (creación, autor, etc) y relacionado con otros blobs, dentro otro archivo conocido como Tree. Este también contiene a partir de su contenido un identificador de 40 digitos.
Nuevamente cada tree esta relacionado con otro archivo que se genera a partir de contenido con un identificador, llamado Commit.
En la siguiente imagen podemos observar, un primer "git commit" con 3 blobs (archivos), relacionados a 1 solo tree y este a un commit. Luego de eso se produjo otro "git commit" incluyendo un nuevo blob, relacionado a través de un tree, que no solo contiene la información del blob sino que además relaciona los 3 blobs anteriores a través de su tree. Y por ultimo vemos que cada commit, genera el archivo commit relacionando cada tree propio, pero el ultimo commit se relaciona con el "parent commit", esto es la relacion que hubo entre las 2 acciones de commiteo.


Instalación

Para hacernos con GIT deberemos ir a su página oficial: https://git-scm.com/downloads y descargar la última versión:


Desde ubuntu tambien se puede realizar a través de su consola:

sudo apt-get install git-core


Para Windows, podremos seguir la instalción por defecto, salvo en la siguiente pantalla:


Y ya estamos listos para iniciar "GIT Bash" y tirar comandos como locos! xD

No hay comentarios:

Publicar un comentario