Introducción a GIT


Control de Versiones Distribuido

Sistema ideal para proyectos de software que requieren trabajo en equipo

Colaboración Flexible

Permite que múltiples desarrolladores trabajen simultáneamente sin interferencias

Historial de Cambios

Rastrea y gestiona cada modificación en el proyecto de manera eficiente

Control de Versiones Distribuido

1

Registro Histórico de Cambios

Git permite rastrear cada modificación en el código fuente, creando un historial completo de la evolución del proyecto.

2

Colaboración sin Conflictos

Con Git, varios desarrolladores pueden trabajar simultáneamente en el mismo proyecto sin generar conflictos de edición.

3

Integración Fluida

Los cambios se fusionan de manera organizada, manteniendo la integridad del código en todo momento.

Eficiencia y Cohesión

1

Organización con Ramas

Git facilita la organización del trabajo dividiendo el proyecto en ramas, cada una con un objetivo específico.

2

Desarrollo Paralelo

Los desarrolladores trabajan de forma independiente en sus ramas específicas, maximizando la productividad.

3

Flujo de Trabajo Eficiente

Finalmente, Git permite integrar todos los cambios de manera fluida y ordenada en el proyecto principal.

Algunos Datos.

100M

Repositorios

Más de 100 millones de repositorios en GitHub, la plataforma de alojamiento de código más popular.

87%

Usuarios

Más del 87% de los desarrolladores utilizan Git para la gestión de versiones, demostrando su popularidad y utilidad.

Ventajas de Git

El flujo de trabajo en Git es un proceso continuo que potencia el desarrollo colaborativo:

1
1

Experimentación Segura

Crea ramas para probar nuevas ideas

2
2

Colaboración Fluida

Trabajo simultáneo sin conflictos

3
3

Revisión y Mejora

Comunicación efectiva del equipo

Este ciclo continuo permite que los equipos innoven, colaboren y mejoren constantemente el código de forma segura y eficiente.

¿Qué es un control de versiones?

1

Historial de cambios

Git te permite ver cómo ha evolucionado el código con el tiempo, permitiendo que se realicen cambios sin riesgo de pérdida de información.

2

Comparación de modificaciones

Puedes comparar fácilmente las diferencias entre versiones del código, para identificar cambios específicos y comprender su impacto.

3

Restauración de archivos

Git facilita la restauración de archivos a versiones anteriores, en caso de errores, modificaciones no deseadas o pérdida de datos.

Beneficios clave

Control de historial

Git permite rastrear cada cambio en el código, creando un historial completo y facilitando la recuperación de versiones anteriores.

Colaboración eficiente

Git facilita la colaboración en proyectos, permitiendo a los desarrolladores trabajar en conjunto de manera eficiente y segura.

Seguridad garantizada

Git proporciona una capa de seguridad para proteger el código fuente, evitando la pérdida de información y facilitando la recuperación de versiones.

Tipos de sistemas de Control de versiones

VCS Local

Un sistema de control de versiones local almacena el historial de cambios en la computadora del usuario, sin un servidor central.

CVCS

Un sistema de control de versiones centralizado utiliza un servidor central que almacena todos los archivos y el historial de cambios, y los usuarios trabajan como clientes.

DVCS

Un sistema de control de versiones distribuido, como Git, permite que cada usuario tenga una copia completa del repositorio, con su propio historial local.

¿Por qué usar GIT?

Sistema distribuido

Git es un sistema distribuido, lo que significa que no depende de un único servidor central, lo que lo hace más resistente a fallos.

Trabajo Desconectado

Puedes trabajar en Git sin conexión a Internet, haciendo commits y viendo el historial de cambios, y luego sincronizar tus cambios con el servidor remoto.

Flujos de trabajo y colaboraciones

Git admite diferentes flujos de trabajo y permite que los equipos colaboren de forma eficiente, con diferentes ramas y estrategias de fusión.

Rápido y eficiente

Git es conocido por su velocidad y eficiencia, y es utilizado por proyectos de código abierto, empresas de tecnología, y una amplia gama de desarrolladores.

Git usa instantáneas, no diferencias.

1

Otros sistemas tradicionales

La mayoría de los sistemas de control de versiones almacenan los cambios como una serie de deltas, que son las diferencias entre las versiones de los archivos.

2

Sistema Git moderno

Git, en cambio, almacena una instantánea completa del estado del sistema de archivos en cada confirmación (commit), lo que permite recuperar versiones anteriores de forma más eficiente.

3

Beneficio principal

Esta estructura permite una recuperación más rápida y confiable de cualquier versión anterior del proyecto.

Snapshots vs Deltas

Snapshots

Git guarda una copia completa del estado del proyecto en cada confirmación (commit), lo que permite recuperar versiones anteriores de forma rápida y eficiente.

Deltas

Otros sistemas de control de versiones almacenan las diferencias entre las versiones de los archivos, lo que puede resultar en una mayor complejidad y un proceso de recuperación más lento.

¿Por qué GIT es tan rápido?

1

Operaciones locales

Git realiza la mayoría de sus operaciones de forma local, sin necesidad de comunicarse constantemente con un servidor remoto, lo que lo hace extremadamente rápido.

2

Historial accesible al instante

Con Git, puedes ver el historial del proyecto sin esperar respuestas de un servidor remoto, lo que lo hace muy eficiente.

3

Comparaciones locales

Git permite calcular las diferencias entre versiones de archivos de forma local, sin necesidad de descargarlas de un servidor remoto.

4

Trabajo sin conexión

Puedes seguir trabajando, haciendo commits y viendo el historial aunque no tengas conexión a Internet o VPN, lo que lo hace ideal para trabajar en diferentes lugares o con conexión intermitente.

Trabajo sin conexión

Trabajo Local

Git te permite trabajar en tu proyecto sin conexión a internet, haciendo commits y viendo el historial de cambios.

Sincronización

Solo necesitas conexión para hacer `git push` o `git pull` desde un repositorio remoto.

Respaldo Seguro

Es importante hacer `git push` regularmente para evitar pérdida de cambios en caso de perder el equipo.

Trabajo sin conexión

1

Trabajo Local

Puedes usar Git sin un repositorio remoto para realizar commits y gestionar versiones localmente.

2

Repositorio Remoto

Aunque no es obligatorio, usar un repositorio remoto es altamente recomendable cuando trabajas en equipo o necesitas respaldo.

3

Gestión de Cambios

Al hacer commits sin realizar `git push`, tus cambios solo se almacenan en tu máquina local.

4

Medidas de Seguridad

Si tu disco duro falla o pierdes el equipo, todo lo que no esté en un repositorio remoto se perderá. Por eso es crucial mantener respaldos remotos.

GIT y la integridad de datos

1

Huella digital

Git utiliza un hash SHA-1 para garantizar la integridad de los archivos, creando una huella digital única para cada archivo o directorio.

2

Detección de cambios

Si se modifica un archivo, el hash SHA-1 cambia, lo que permite a Git detectar cambios no autorizados o corrupción de archivos.

3

Seguridad de la información

Git protege la información contra la pérdida o la corrupción, ya que cualquier cambio no autorizado se puede detectar fácilmente.

SHA-1: La Huella Digital de Git

El sistema SHA-1 es fundamental para la integridad y seguridad de Git:

1

Generación del Hash

Git crea un identificador SHA-1 único de 40 caracteres para cada archivo y directorio

2

Verificación de Integridad

Cualquier cambio en el contenido modifica automáticamente el hash SHA-1

3

Almacenamiento Seguro

Git guarda los archivos por su hash SHA-1, no por nombre, garantizando su inmutabilidad

Este sistema de hashing garantiza que cada versión de un archivo sea única y verificable, proporcionando una capa fundamental de seguridad en Git.

Renombrar archivos

El proceso de renombrar archivos en Git puede realizarse de dos maneras:

1

1. Renombrar manualmente

Si renombras un archivo manualmente, Git no lo detecta automáticamente como un cambio de nombre y lo verá como un archivo eliminado y uno nuevo.

2

2. Usar comando git mv

Puedes usar `git mv` para renombrar archivos y actualizar su seguimiento en Git al mismo tiempo.

3

3. Resultado

El cambio se realiza en el sistema de archivos y se registra automáticamente en Git, manteniendo el historial del archivo.

Renombrar con Git

Comando `git mv`

El comando `git mv` mueve el archivo físicamente y actualiza su seguimiento en Git, realizando el cambio de nombre en el sistema de archivos y registrando el cambio en Git.

1

mv archivo.txt

Mover archivo físicamente

2

git rm archivo.txt

Eliminar archivo del seguimiento

3

git add nuevo.txt

Agregar nuevo archivo

Usando `git mv` realizamos estos tres pasos de forma integrada y eficiente en un solo comando.

Comandos básicos

1

git init

Inicializa un repositorio Git en la carpeta actual, creando un directorio oculto `.git` para almacenar toda la información del repositorio.

2

git config

Configura el nombre de usuario y el correo electrónico que se asociarán a los commits en este equipo, se puede configurar de forma global o local.

3

git status

Muestra información sobre los cambios en el repositorio, incluyendo archivos sin seguimiento, modificados o listos para ser confirmados.

4

git add

Agrega archivos al área de preparación (staging), preparándolos para ser confirmados en el repositorio. Se puede agregar un archivo o todos los archivos modificados y nuevos.

5

git commit

Guarda un snapshot del estado actual del repositorio con una descripción del cambio realizado. El mensaje debe ser claro y conciso, con un máximo de 50 caracteres.

6

git log

Muestra el historial de commits con detalles como el autor, fecha y mensaje, se puede utilizar la opción `--oneline` para ver un historial más compacto.

7

git clone

Descarga un proyecto desde un repositorio remoto, incluyendo el código y su historial de cambios, en una nueva carpeta.

8

git push

Envía los cambios de la rama `main` al repositorio remoto, se puede utilizar `git push --set-upstream origin main` para configurar la rama la primera vez.

9

git pull

Descarga y fusiona los cambios desde el repositorio remoto, se pueden resolver conflictos manualmente si se presentan.

Comandos básicos. Ramas

El proceso de enviar cambios al repositorio remoto sigue una secuencia específica:

1

Preparación Local

El comportamiento de `git push` depende de la configuración de Git y si ya se ha configurado un "remote tracking branch".

2

Especificar Destino

`origin` es el nombre del repositorio remoto por defecto cuando clonas un repositorio.

3

Seleccionar Rama

`main` es la rama a la que se quieren enviar los cambios, siendo explícito para evitar problemas con múltiples ramas remotas.

Usando el comando completo `git push origin main` aseguramos que los cambios se envían al destino correcto.

Comandos básicos. Ramas

Los comandos de ramas en Git nos permiten gestionar diferentes líneas de desarrollo en nuestro proyecto.

git branch

Muestra las ramas locales en el repositorio, permite ver las ramas disponibles para trabajar.

git branch –r

Muestra las ramas remotas del repositorio, permite ver las ramas disponibles para trabajar.

1

Crear rama

git branch nueva-rama

2

Cambiar rama

git checkout nueva-rama

3

Ver ramas

git branch --list

Clonar un Repositorio Existente

Para comenzar a trabajar con un proyecto Git existente, necesitamos obtener una copia local del repositorio remoto. El proceso de clonación nos permite descargar el proyecto completo, incluyendo todo su historial de cambios.

Ejecutar comando básico de clonación

git clone https://github.com/usuario/repositorio.git

Este comando descarga una copia completa del proyecto, incluyendo todos los archivos, ramas y el historial completo de cambios.

Git crea el directorio automáticamente

Por defecto, Git creará un directorio nuevo con el mismo nombre del repositorio. Por ejemplo, si el repositorio se llama "mi-proyecto", se creará un directorio llamado "mi-proyecto".

Personalizar el nombre del directorio (opcional)

git clone https://github.com/usuario/repositorio.git nombre-personalizado

En este caso, el repositorio se clonará en un directorio llamado "nombre-personalizado" en lugar del nombre original del repositorio. Una vez clonado, tendremos una copia local totalmente funcional del proyecto en nuestro equipo.

Crear un repositorio

GitHub es la plataforma más utilizada para alojar repositorios Git, permitiendo que los desarrolladores compartan código, colaboren y gestionen sus proyectos.

1

Acceder a GitHub

Visita https://github.com/new con tu cuenta de GitHub

2

Iniciar repositorio

Haz clic en el botón "New repository" en la interfaz de GitHub

3

Configurar detalles

Establece el nombre del repositorio y las opciones básicas

4

¡Listo para usar!

Tu nuevo repositorio está creado y listo para comenzar

Crear un repositorio

1

1. Nombre del proyecto

El nombre del repositorio es el nombre del proyecto, debe ser breve y descriptivo, por ejemplo, "hello-world" para un proyecto básico.

2

2. Descripción

La descripción del proyecto es una breve explicación de lo que hace el proyecto, se puede utilizar para proporcionar más información sobre el proyecto a los usuarios.

3

3. Público o privado

Se puede elegir si el repositorio es público, accesible a todos, o privado, solo accesible para el creador y los colaboradores.

Inicializar el repositorio

1

README.md

Es un archivo importante en el repositorio, se utiliza para proporcionar información básica sobre el proyecto, incluyendo la descripción, la instalación, el uso y la información de contacto.

2

Plantilla de README

Puedes usar una plantilla de README.md para comenzar, como la que se encuentra en https://gist.github.com/SINENSIA/3b4e6945c041f9d3548bfc1af373192a

3

Repositorio Listo

Con el README.md configurado, tu repositorio está preparado para compartir información clara sobre tu proyecto.

Inicializar el repositorio

1

Título y Descripción

Comienza con un título claro y conciso que describa tu proyecto. Proporciona una breve descripción que explique de qué se trata el proyecto y su propósito.

2

Instalación

Detalla los pasos necesarios para instalar y configurar el proyecto, como dependencias, comandos de instalación y configuración del entorno.

3

Uso

Explica cómo utilizar el proyecto. Proporciona ejemplos de código y guías paso a paso para mostrar a los usuarios cómo pueden aprovecharlo.

Inicializar el repositorio

1

Contribución

Explica qué pautas seguir para contribuir de manera efectiva al repositorio para otros desarrolladores que quieran colaborar. Enlaces a una Wiki o tutoriales.

2

Licencia y créditos

Especifica la licencia bajo la cual se distribuye el proyecto. También puedes incluir una sección con agradecimientos y créditos a los colaboradores.

3

Estado del Proyecto

Indica el estado actual del proyecto. Si está en desarrollo o es una versión estable o quizá solo un prototipo.

4

Contacto

Para que los usuarios puedan comunicarse con el autor o coordinador en caso de preguntas o problemas.

Inicializar el repositorio

1

Crear Encabezados

Para crear un índice con links a cada una de las secciones, usa esta sintaxis:

`[Enlace al Título](#título-del-proyecto)`

2

Formatear Enlaces

Los enlaces deben usar `kebab case` para el nombre de la sección:

`[Enlace a la Descripción](#descripción)`

3

Vincular Documentos

También puedes enlazar a otros archivos:

`[Guía de contribución](docs/CONTRIBUTING.md)`

Inicializar el repositorio

Negrita

Usamos `**` antes y después del texto que se desea poner en negrita, por ejemplo, `**Barco**`

Cursiva

Usamos `_` antes y después del texto que se desea poner en cursiva, por ejemplo, `_Clase para manejar barcos_`

Código

Usamos `\`\`\` antes y después del código, e indicamos el lenguaje, por ejemplo, `\`\`\`java`

Inicializar el repositorio

Listas

Usamos `-` antes de cada elemento de la lista, por ejemplo, `- Version 0.1 (2023-04-19) - lanzamiento inicial`

Bloques

Indentamos 4 espacios para crear bloques de texto, por ejemplo, ` 1. Fork it!`

Comandos

Usamos `\` antes y después de los comandos, por ejemplo, `\`git checkout -b my-new-feature\``

Inicializar el repositorio

Archivo .gitignore

Un archivo importante que siempre debes incluir y configurar en tus repositorios, controla qué archivos o directorios deben ser ignorados por Git.

Comentarios

Puedes agregar comentarios en el archivo .gitignore usando el símbolo `#`, los comentarios son útiles para documentar las reglas.

Inicializar el repositorio

1

1. Estructura del Proyecto

Los patrones en un archivo .gitignore son rutas relativas a la ubicación del archivo .gitignore.

2

2. Ubicación del .gitignore

proyecto/ ├── .gitignore ├── carpeta/ │ └── archivo.exe ├── otro_archivo.txt └── archivo.exe
3

3. Uso de Patrones Relativos

En el archivo .gitignore ubicado en la carpeta "proyecto", puedes usar un patrón relativo como `carpeta/archivo.exe` para ignorar solo ese archivo en particular.

Inicializar el repositorio

1

Patrones Comodín

Si usas un patrón como `*.exe`, se aplicará a todos los archivos con extensión ".exe" en el directorio actual y sus subdirectorios.

2

Directorios

Si deseas ignorar un directorio completo y su contenido, puedes usar un patrón como `nombre_de_directorio/`, por ejemplo, `carpeta/` ignorará todo el contenido de la carpeta "carpeta" y todos sus subdirectorios.

Inicializar el repositorio

1

Regla general

Primero se establece una regla general como `*.log` para ignorar todos los archivos log

2

Excepción

Se añade el patrón negativo `!importante.log` para hacer la excepción

3

Resultado

Git ignorará todos los archivos .log excepto 'importante.log'

Si deseas hacer una excepción a una regla de ignorar, puedes usar un patrón negativo, por ejemplo, `!importante.log` después de la regla `*.log`.

Clonar el repositorio

Localizar el repositorio

Navega hasta el repositorio deseado en GitHub que deseas clonar.

Copiar la dirección

Haz clic en el botón verde "Code" y copia la URL del repositorio HTTPS o SSH.

Ejecutar el comando clone

Abre la terminal, navega a la carpeta destino y ejecuta "git clone" seguido de la URL copiada.

Verificar la clonación

Comprueba que el repositorio se ha clonado correctamente explorando la nueva carpeta creada.

Clonar el repositorio

1

Instalación de Git

Asegúrate de tener Git instalado en tu sistema antes de clonar el repositorio, puedes descargar e instalar Git desde la página web oficial.

2

Comando `git clone`

Usa el comando `git clone` seguido de la dirección del repositorio para clonar el proyecto en tu computadora local.

Clonar el repositorio

1

Abrir IDE

Inicia tu entorno de desarrollo integrado preferido

2

Cargar proyecto

Selecciona la carpeta del repositorio clonado

3

Comenzar desarrollo

Empieza a trabajar con el código del proyecto

Una vez que el repositorio esté clonado en tu computadora, puedes seguir estos pasos para comenzar a desarrollar.

Clonar el repositorio

Integración con IDE

Visual Studio Code

Control de versiones integrado y extensiones oficiales de Git

Eclipse

Perspectiva Git incorporada y herramientas de control de versiones

IntelliJ IDEA

Potentes herramientas de Git nativas y plugins adicionales

Cada IDE moderno ofrece herramientas, extensiones o plugins específicos para facilitar la integración con Git, mejorando tu flujo de trabajo.

Clonar el repositorio

Localizar carpeta

Navega hasta la ubicación donde deseas clonar el repositorio

Abrir IDE

Inicia tu entorno de desarrollo integrado favorito

Importar proyecto

Selecciona la carpeta del proyecto clonado en tu IDE

¡Listo para comenzar!

El proyecto está configurado y listo para trabajar

Flujo de trabajo básico

1

Inicializar

Crea un nuevo repositorio con `git init`.

2

Agregar

Agrega archivos al área de preparación con `git add`.

3

Confirmar

Confirma los cambios con `git commit`.

4

Subir

Sube los cambios al repositorio remoto con `git push`.

5

Descargar

Descarga los últimos cambios desde el repositorio remoto con `git pull`.

Ramas en Git

1

Creación de ramas

Crea una nueva rama con `git checkout -b nombre_de_la_rama`.

2

Cambiar de rama

Cambia a una rama existente con `git checkout nombre_de_la_rama`.

3

Fusionar ramas

Fusiona una rama con otra con `git merge nombre_de_la_rama`.

Ramas en Git

1

Ramas principales

Las ramas principales son las que contienen el código base del proyecto.

2

Ramas de desarrollo

Las ramas de desarrollo se utilizan para desarrollar nuevas características, corregir errores o probar ideas.

3

Ramas de características

Las ramas de características se utilizan para desarrollar una característica específica del proyecto.

El flujo de trabajo en Git permite una progresión natural desde las ramas de características hacia las ramas de desarrollo, y finalmente hacia la rama principal.

Ramas en Git

El flujo de trabajo con ramas en Git es un proceso cíclico que permite el desarrollo colaborativo eficiente.

1
1

Flujo de trabajo de ramas

Las ramas son herramientas esenciales para el trabajo en equipo, permiten a los desarrolladores trabajar de forma independiente y luego integrar sus cambios.

2
2

Ramas para pruebas

Las ramas de desarrollo pueden usarse para probar nuevas ideas o funciones sin afectar la rama principal.

3
3

Integración de cambios

Las ramas se fusionan con la rama principal para integrar los cambios en el proyecto principal.

Este ciclo continuo permite un desarrollo ágil y seguro, manteniendo la integridad del código base mientras se desarrollan nuevas características.

Manejo de conflictos

El proceso de manejar conflictos en Git sigue un ciclo predecible:

1
1

1. Detección de conflictos

Los conflictos surgen cuando dos ramas realizan cambios en el mismo archivo. Git no puede fusionar automáticamente los cambios.

2
2

2. Análisis y resolución

Se puede resolver un conflicto manualmente editando el archivo y seleccionando los cambios que se desean mantener.

3
3

3. Uso de herramientas

Git proporciona una herramienta gráfica para ayudar a resolver conflictos, el comando `git mergetool` inicia la herramienta de fusión integrada.

Este ciclo se repite cada vez que surgen nuevos conflictos durante el desarrollo colaborativo.

Comandos para manejo de conflictos

1

Comando `git diff`

Muestra las diferencias entre dos versiones de un archivo o entre dos ramas.

2

Comando `git log`

Muestra el historial de commits, puede ser útil para ver los cambios que se han realizado en un archivo o rama.

3

Comando `git checkout`

Permite cambiar de rama, puede ser útil para volver a una rama anterior y comparar los cambios.

Proceso de resolución

Estos comandos trabajan en conjunto para ayudarte a resolver conflictos de manera efectiva.

Flujo de trabajo

Sigue esta secuencia para gestionar conflictos en tu repositorio.

Herramientas de Git

1

GitHub

La plataforma más popular para alojar repositorios Git, permite a los desarrolladores colaborar y gestionar sus proyectos.

2

GitLab

Una plataforma alternativa a GitHub, ofrece una amplia gama de funciones para la gestión de proyectos, incluyendo CI/CD, integración con herramientas de desarrollo y seguridad.

3

Bitbucket

Otra alternativa a GitHub, se integra bien con herramientas de desarrollo de Atlassian, como Jira y Bamboo.

4

GitKraken

Un cliente de Git con una interfaz gráfica atractiva y fácil de usar, ofrece funciones avanzadas para la gestión de ramas, conflictos y flujos de trabajo.

5

Sourcetree

Un cliente de Git gratuito para Windows y macOS, ofrece una interfaz gráfica intuitiva y funciones para la gestión de repositorios, ramas y conflictos.

Conclusión

Dominio de Git

Git es una herramienta esencial para los desarrolladores de software y cualquier persona que trabaje con archivos digitales.

Colaboración efectiva

Con Git, puedes gestionar proyectos, trabajar en equipo y colaborar de forma eficiente y segura.

Desarrollo continuo

Mantente al día con las últimas funciones de Git y las mejores prácticas para optimizar tus flujos de trabajo.