Introducción a Git
El control de versiones que
cambió el mundo
Nicolás Riedel | Introducción al Desarrollo de Software - Facultad de Ingeniería (UBA) 1
¿Control de versiones?
Es un software que registra los cambios realizados sobre archivos a lo
largo del tiempo.
Permite volver a versiones anteriores de un archivo o proyecto.
Facilita el trabajo en equipo sin pisarse entre sí.
Mantiene un historial completo de quién cambió qué y cuándo.
Nicolás Riedel | Introducción al Desarrollo de Software - Facultad de Ingeniería (UBA) 2
Nicolás Riedel | Introducción al Desarrollo de Software - Facultad de Ingeniería (UBA) 3
Breve historia
Año Herramienta Tipo
1972 SCCS Local
1982 RCS Local
1990 CVS Centralizado
2000 SVN (Subversion) Centralizado
2000 BitKeeper Distribuido
2005 Mercurial Distribuido
2005 Git Distribuido
Los sistemas centralizados dependen de un servidor único. Los
distribuidos le dan a cada desarrollador una copia completa del
historial.
Nicolás Riedel | Introducción al Desarrollo de Software - Facultad de Ingeniería (UBA) 4
Nicolás Riedel | Introducción al Desarrollo de Software - Facultad de Ingeniería (UBA) 5
¿Cómo nació Git?
El kernel de Linux usaba un sistema propietario llamado BitKeeper.
En 2005, la relación con BitKeeper se rompió.
L i n u s To r v a l d s c r e ó G i t e n p o c a s s e m a n a s c o n e s t o s o b j e t i v o s :
Ve l o c i d a d
Diseño simple
Soporte para desarrollo no lineal (miles de ramas)
Completamente distribuido
Open source
Nicolás Riedel | Introducción al Desarrollo de Software - Facultad de Ingeniería (UBA) 6
Repositorio
Un repositorio (repo) es un directorio cuyo historial de cambios está
siendo trackeado (rastreado) por Git.
S e i n i c i a l i z a c o n git init .
C o n t i e n e u n a c a r p e t a o c u l t a .git/ c o n t o d a l a m e t a d a t a .
Puede ser local (en tu máquina) o remoto (en un servidor).
Nicolás Riedel | Introducción al Desarrollo de Software - Facultad de Ingeniería (UBA) 7
Los tres estados
de Git
To d o a r c h i v o e n u n r e p o s i t o r i o
puede estar en uno de estos
estados:
Wo r k i n g D i r e c t o r y → d o n d e
editás tus archivos.
Staging Area (index) → archivos
preparados para el próximo
commit.
Repository (.git) → historial
confirmado.
Nicolás Riedel | Introducción al Desarrollo de Software - Facultad de Ingeniería
(UBA) 8
Ramas (branches)
Una rama es una línea independiente de
desarrollo.
Sirven para llevar distintas líneas de
desarrollo en paralelo.
Luego se pueden mergear (mezclar)
para unificarse.
Lo vamos a ver en profundidad la
siguiente clase.
Nicolás Riedel | Introducción al Desarrollo de Software - Facultad de Ingeniería (UBA) 9
Flujo básico
1. Modificás un archivo en tu directorio de trabajo.
2 . A g r e g á s l o s c a m b i o s a l s t a g i n g a r e a c o n git add .
3 . C o n f i r m á s l o s c a m b i o s c o n git commit .
Nicolás Riedel | Introducción al Desarrollo de Software - Facultad de Ingeniería (UBA) 10
Comandos básicos
Comando Descripción
git init Inicializa un repositorio nuevo
git status Muestra el estado actual de los archivos
git add <archivo> Agrega cambios al staging area
git commit -m "mensaje" Confirma los cambios con un mensaje
git log Muestra el historial de commits
git diff Muestra las diferencias no stageadas
Nicolás Riedel | Introducción al Desarrollo de Software - Facultad de Ingeniería (UBA) 11
Más comandos útiles
Comando Descripción
git clone <url> Clona un repositorio remoto
git pull Trae y fusiona cambios del remoto
git push Sube commits al repositorio remoto
git branch Lista o crea ramas
git checkout <rama> Cambia de rama
git merge <rama> Fusiona una rama en la actual
Nicolás Riedel | Introducción al Desarrollo de Software - Facultad de Ingeniería (UBA) 12
Hosting de repositorios
Git es local. Para colaborar necesitamos un servidor remoto.
Plataforma Destacado
GitHub L a m á s p o p u l a r, g r a n c o m u n i d a d o p e n s o u r c e
GitLab CI/CD integrado, se puede self-hostear
Bitbucket Integración con Jira y el ecosistema Atlassian
Gitea Liviano, self-hosted, open source
En esta materia vamos a usar GitHub.
Nicolás Riedel | Introducción al Desarrollo de Software - Facultad de Ingeniería (UBA) 13
Crear y subir un repositorio
Nicolás Riedel | Introducción al Desarrollo de Software - Facultad de Ingeniería (UBA) 14
Conectar con GitHub y subir
Primero creá el repositorio vacío en GitHub (sin README ni .gitignore).
Nicolás Riedel | Introducción al Desarrollo de Software - Facultad de Ingeniería (UBA) 15
GRACIAS!
Nicolás Riedel | Introducción al Desarrollo de Software - Facultad de Ingeniería (UBA) 16