Ir al contenido principal

¿Qué es y cómo se ocupa git?


1. ¿Qué son los sistemas de control de versiones?

Los sistemas de control de versiones, son sistemas que va a guardando todos los cambios de un archivo o un conjunto de archivos a través del tiempo, así puedes leer tu código de versiones anteriores en versiones futuras del desarrollo, solemos usarlo con filas de codigo fuente de programas, pero en realidad esto se puede hacer con cualquier tipo de archivo.

Si tu eres escritor tambien deberias usar git, sobre todo si usas lenguajes como LaTex, de esa forma llevas una especie de agenda que recuerda todos los cambios que has hecho durante la escritura de tus documentos. Igualmente si eres un diseñador gráfico, puedes llevar un control de versiones de tus bosquejos que has hecho por si se corrompe un archivo tener el respaldo de tus antiguas versiones y poder recuperarlas, yo por ejemplo, llevo controladas todas las versiones de mis post en un repositorio git.

Implementar sistemas de control de versiones (VCS) es una decisión muy sabia, porque te permite revertir tus archivos a una versión anterior fácilmente o un proyecto completo, y también puedes comparar dos archivos con distintas versiones, o identificar un problema en tu código comparando las líneas de código entre la versión actual y la anterior, lo que significa que si estás usando un sistema de control de versiones y borras tus archivos o algo sale mal fácilmente puedes recuperarlos overhead.Implementar sistemas de control de versiones (VCS) es una decisión muy sabia, porque te permite revertir tus archivos a una versión anterior fácilmente o un proyecto completo, y también puedes comparar dos archivos con distintas versiones, o identificar un problema en tu código comparando las líneas de código entre la versión actual y la anterior, lo que significa que si estás usando un sistema de control de versiones y borras tus archivos o algo sale mal fácilmente puedes recuperarlos , es decir todo lo que consigues al leer este post son beneficios.

Mucha gente escoge un método rudimentario de control de versiones, que es ir copiando sus archivos en otra carpeta, con el fin de tener un backup en caso de que se le pierdan sus archivos, pero tienes muchos inconvenientes o escenarios posibles que pueden afectar a tu backup, como borrar accidentalmente la carpeta, o olvidar el nombre del directorio donde dejaste tus archivos, y si llevas un backup en la nube puedes olvidar la contraseña de tu cuenta entre muchas otras cosas.

Los programadores del pasado, desarrollaron una especie de base de datos para llevar todos los cambios que realizaban a un archivo.





Uno de los sistemas más populares de control de sistemas que ocupaba esta filosofía fue RCS, que trabajaba guardando la diferencia entre los dos archivos en un archivo en el disco duro, con un formato especial y así recrear cómo cada archivo se veía antes de cualquier cambio y tener los archivos completos cuando se juntaban todos estos archivos

Pero el problema mayor que se vio fue el cómo colaborar con un equipo de programadores. Para esto se desarrolló un sistema en donde un servidor central tenía todos los cambios que el equipo completo iba efectuando a los archivos, y este fue el estándar por mucho tiempo







De esta forma se solucionan muchos problemas, ya que el equipo tenía control sobre los cambios que se iban realizado a cada archivo, y se podían y el administrador podía seguir muy de cerca los cambios que se iban haciendo al software durante las etapas del desarrollo y se podía tener una base de datos para cada cliente.

Aun así este sistema tienes muchas desventajas y potenciales fallas que se pueden presentar, porque tienes un servidor local de tu empresa y ese puede fallar y perder todos los datos del desarrollo.

2. ¿Que es git?

Git es un sistema de control de versiones, que es muy fácil y flexible cualquier persona puede usar git de manera fácil, y configurarlo de manera rápida en su pc, es bastante parecida al último sistema de control de versiones que discutimos, pero tiene un cambio muy grande en la manera en que va controlando los cambios de los archivos.

La diferencia más grande entre git y otros sistemas de VCS es la manera en que Git administra los cambios de tus archivos, otros sistemas es solo un cúmulo de cambios entre archivos, y de esa manera poder reconstruir los archivos algo como esto.





En cambio git, toma una fotografía de todo el directorio, para tener una versión en miniatura de todos tus archivos, y cuando haces un commit intenta comparar solo los archivos a los que has hecho cambios, en el fondo no revisa todos los archivos en búsqueda de cambios si no solo a los que le has hecho un cambio, por eso git es más eficiente, y al momento de hacer commit no guarda los archivos solo a los que tienen cambios respecto a sus versiones anteriores. Git es más como una galería de fotografías instantáneas de tus archivos.






Git considera todos los aspectos del control de versiones que heredó de las versiones anteriores de las VCS, lo que lo hace una herramienta muy poderosa para llevar el control de tus archivos durante el desarrollo de un proyecto.

Git no necesita conectarse a internet para determinar los cambios de tus archivos, todo lo hace de forma local, por lo que los cambios se reconocen de forma casi automática, no necesita consultar el historial de cambios porque tienes todos los cambios de manera local en tu computador, lo que significa que puedes trabajar en cualquier lado sin necesidad de conectarte a internet y luego subirlos a un servicio en línea compatible con git una vez llegas a tu hogar o a un lugar donde tengas una conexión de internet.

Git tiene integridad. Esto significa que hace una suma de chequeo para cada uno de los archivos (checksum), lo que significa es que git sabe instantáneamente cuando hiciste una modificación en tus archivos, y también es imposible modificar los contenidos de los archivos sin que git se entere, el método que usa git para hacer las sumas de chequeo es el algoritmo SHA-1. Git guarda los archivos no por el nombre si no por la suma de chequeos de tus archivos






Git generalmente solo añade información. Git para llevar un historial de cambios solo añade información a el no borra información sobre los cambios aunque elimines líneas de código, eso te da seguridad de siempre tener disponibles las versiones anteriores aunque hayas eliminado lineas de codigo de tus archivos.

En git tienes tres estados por lo que pasan tus archivos, y presta atención a esto porque estos tres pasos son los más fundamentales para proseguir con el proceso de aprendizaje sin problema.
  • Modified (Modificado): Esto significa que has modificado tu archivo pero aun no has confirmado los cambios que les hiciste.
  • Staged (Preparado): Significa que has marcado los cambios en tu archivo actual para proseguir a la próxima confirmación.
  • Commited (confirmado): Esto significa que tus datos están almacenados de forma segura en tu base de datos local.








El repositorio git es la parte esencial de git y es lo que se copia a tu computador cuando clonas, ahí se almacenan todos los metadatos de tu aplicación. El repositorio es la copia de cierta versión de tu proyecto, estos archivos se sacan de la base de datos comprimida dentro de tu repositorio y se colocan en el disco para que puedas modificarlos.

El flujo de trabajo con git es el siguiente:

  • Modificas una serie de archivos en tu directorio de trabajo.
  • Preparar los archivos poniéndolos en el area de preparacion.
  • Confirmar los cambios y almacenar esas fotografías comprimidas de tus archivos en el directorio git.

3. Instalando Git

Instalación en Linux

Si estás usando una distribución basada en debian: Ubuntu, Mint, etc. Debes escribir esta linea en tu consola:

$ apt-get install git  
        

Si estás usando fedora puedes instalarlo con Yum

$ yum install git-core


Si estás usando una versión de linux que instale RPM: RHEL o CENTOs puedes instalarlo con DNF

$ sudo dnf install git-all


Instalación en Mac

Para instalar Ubuntu en OS x puedes usar el instalador de OSx, que puedes conseguir aquí.


De igual manera si estás usando Homebrew puedes instalarlo con el siguiente comando

$ brew install git


Instalación en Windows

Puedes instalar Git en windows usando el instalador oficial que puedes conseguir aqui


Igualmente te instalará una consola de Git, que es la que te recomiendo usar para hacer todas las operaciones de Git que veremos a continuación, puedes encontrarla apretando inicio y escribiendo Git Bash

4. Configurando Git Por Primera Vez

Git necesita tener tu identidad, porque esa identidad la pone en los repositorios para que puedan enviarte emails fácilmente si tienen consultas al clonar tu repositorio, por lo que debes configurarla.

Para eso vamos a abrir la consola o en el caso de windows la Git Bash y vamos a escribir lo siguiente


$ git config --global user.name "Jaime Crispi"
 
$ git config --global user.email ejemplo@example.com

Usamos la opción --global para que git use siempre esa identidad para todo lo que hagas con el sistema git, y no estar escribiendo tu identidad cada vez que hagas un repositorio.

Puedes configurar tu editor de texto para que git reconozca cuando tengas que confirmar un mensaje, si no pones nada se usará el editor por defecto en tu sistema

$ git config --global core.editor vscode

Para comprobar que tu configuración es correcta vamos a escribir lo siguiente.

$ git config --list 


Y para consultar por un valor individualmente debemos llamarlo de esta manera

$ git config user.name 
Out:  
Jaime Crispi
Para obtener ayuda debes usar el comando git help, por ejemplo para obtener ayuda sobre el comando config

$ git help config

5. Creando nuestro primer repositorio

Para crear tu primer repositorio, debes situarte en la carpeta central donde tienes un proyecto, yo tengo una carpeta de ejemplos de C++ donde donde creare un nuevo repositorio, para inicializar un repositorio git, debemos escribir la siguiente línea en nuestra consola situándonos en la carpeta que queramos agregar.

$ git init 
Out:
Initialized empty Git repository in /home/harpie/Escritorio/C++/.git/  
        
Esto crea una sub carpeta oculta llamada .git que tiene un esqueleto de todos nuestras carpetas pero sin ni una información, ahora si deseas empezar a controlar las versiones de esa carpeta, puedes llevar los archivos al area de preparacion.

$ git add *.cpp  

Con este comando llevó todos los archivos con extensión cpp al área de preparación, ahora si quiero ver el estado de mis archivos puedo hacer lo siguiente

$ git status  
On branch master No commits yet Changes to be committed: (use "git rm --cached <file>..." to unstage) new file: aritmetica.cpp new file: condif.cpp new file: datos.cpp new file: entrada.cpp
Ahora si quiero confirmar los cambios debo escribir lo siguiente

$ git commit -m "confirmacion inicial"

            

             Out:

             [master (root-commit) 524d279] confirmacion inicial

              19 files changed, 302 insertions(+)

              create mode 100644 aritmetica.cpp

              create mode 100644 condif.cpp

              create mode 100644 datos.cpp

              create mode 100644 entrada.cpp


Ahora vamos a explicar como configurar GitHub para subir nuestro repositorio.

Para configurar GitHub con nuestro computador, debemos generar las claves ssh, para ello tenemos que escribir el siguiente comando en la consola.

$ ssh-keygen -t rsa -b 4096 -C "tuemail@ejemplo.com"
Esto va a generar un par de claves una pública y una privada, para que github no bloquee mi conexión con mi cuenta. Nos pedirá una contraseña para la clave privada, pon la que quieras. Esto se puede volver a repetir en el futuro
$ eval "$(ssh-agent -s)" 

Ahora vamos a iniciar el cliente SSH con ese comando, y luego registrar las claves ssh, para que nuestro cliente SSH trabaje con ellas

$ ssh-add ~/.ssh/id_rsa  
Ahora vamos a agregar nuestra clave SSH a github, para ello escribiremos lo siguiente en la consola de linux, o la git bash en windows

$ cat ~/.ssh/id_rsa.pub  
Y copiaremos lo que salga en la consola y nos dirigiremos a github y nos crearemos una cuenta o entraremos a ella.

Vamos a dirigirnos a settings. Haciendo click sobre nuestra imagen de perfil

Luego iremos al siguiente apartado






Ahora apretaremos new SSH Key






Y le pondremos un título y copiaremos nuestra clave ssh en el Área de texto más grande y presionaremos add SSH Key.

Ahora vamos a subir nuestro repositorio a github, para ello vamos a ir al boton "+" .

Le pondremos un nombre y una descripción acorde a nuestro proyecto

Y presionaremos, Create Repository

Si vamos a subir un repositorio existente en nuestro computador no vamos a ponerle ni un gitignore y ni una licencia ya que eso generará conflictos con nuestro repositorio local.







Ahora vamos a copiar eso en nuestra consola de linux o git bash, al momento de hacer el push por primera vez nos pedirá la contraseña pero solo será la primera vez. El comando cambia de acuerdo a tu repositorio

$ git remote add origin git@github.com:usuario/nombre_del_repositorio.git  
        $ git push -u origin master  

Por último refrescamos la página y nuestros archivos ya estan en github





6. Conclusión y Agradecimientos

Github es una herramienta necesaria para cualquier persona que trabaje con su computador ya seas un escritor, músico, etc. Todos necesitamos llevar un control de versiones de todo nuestro trabajo con el fin de protegerlo, y git es una herramienta bastante poderosa, y queda bastante mas por aprender por lo que te recomiendo no comprar cursos de git, sino leer el libro gratis de la comunidad de git que cubre todo el funcionamiento con muchos detalles y te puedes hacer un experto en git


El libro esta en Español, asi que no hay excusas para no aprender git.

Te agradezco por leer este articulo, creo que es un tema importante para todos y el siguiente articulo será de Pandas para reanudar el trabajo, pero necesitaba distraerme del tema del machine learning por un articulo, nos vemos en el próximo articulo :D

Comentarios

Entradas más populares de este blog

Deep Learning Básico Parte Final: Autoencoders

Autor: Andre Mouton 0. Requisitos El éxito no se mide en cuántos ceros tengas en tu cuenta. Solo busca algo que te vuelva loco, y dedicate a ello — Marcelo Guital 2017 1. Introducción Hemos llegado a la parte final de los conceptos básicos en Deep Learning, hoy veremos los Autoencoders . ¿que es un autoencoder ?. Bueno así se ve un autoencoder . Donde los nodos Amarillos son la entrada y los Rojos son la salida , esto significa que nuestra red está direccionada , es decir que tiene entradas y salidas . ¿Cual es el propósito del autoencoder?. Bueno como el nombre lo dice un Autoencoder se codifica a si mismo, esta es la filosofía detrás del autoencoder . Toma una serie de entradas los pasa por una capa oculta y produce salidas, siempre intentando que las salidas sean iguales a las entradas. Se puede decir que los Autoencoders no son un proceso de aprendizaje no supervisado en toda la regla, es realmente un algoritmo de aprendizaje autosupervisado, por...

Machine Learning Parte 2: Numpy

0. Capítulos anteriores 1. Introducción Numpy es actualmente la mejor manera de trabajar con Arrays, Vectores y Matrices, en Python. Es una de las librerías más eficientes en CPU para hacer operaciones con matrices y convertir Python en algo más parecido a Matlab y acelerar Python al máximo. Tiene un montón de funciones que me encantaría cubrir su totalidad, pero lamentablemente no me daría el tiempo a seguir la serie. Y es una opción fundamental para el Data Science en Python. Pero, ¿Por qué numpy es tan rápido y eficiente?, lo que pasa es que numpy usa un proceso que se llama “vectorización” en donde toma la lógica de tu código y la pre compila a C detrás de los telones. Eso nos otorga el poder de C pero en Python. Para instalar Numpy, abre una terminal en cualquier parte de tu sistema, y si tienes Python instalado escribe “ pip install numpy ” y con esto estarás listo para usar Numpy y aprovechar todo el poder que nos ofrece. Ahora lo siguiente que haremos es cre...