John Cardozo
John Cardozo
Git es un sistema de control de versiones distribuido
Controla los cambios hechos por los usuarios en un proyecto a través del tiempo
Registra cambios y permite volver a una versión anterior
Orientado a trabajo colaborativo
Aporta flexibilidad al trabajo en equipo
Server
Working Copy
Local Repository
Remote Repository
Working Copy
Local Repository
Working Copy
Local Repository
push
pull
commit
git config --global user.name "John Cardozo"
git config --global user.email "johncardozo@gmail.com"
Configuración global
git config --local user.name "John Cardozo"
git config --local user.email "johncardozo@gmail.com"
Configuración por repositorio
Sitio oficial de descargas de Git
git config --list
Consultar la configuración de Git
Working Directory
Staging Area
Local Repository
Remote Repository
Directorio de trabajo en la máquina de desarrollo. Zona en la cual se agregan, editan y eliminan archivos y directorios
Zona en la cual se encuentran los archivos y directorios que se publicarán en el repositorio local
Repositorio local donde se encuentran los archivos y directorios que se publicarán en el repositorio remoto
Repositorio remoto donde se encuentran los archivos y directorios publicados por todos los usuarios
add
commit
push
LOCAL
REMOTO
Staging Area
Local Repository
Remote Repository
Working Directory
Modificaciones al proyecto en el espacio de trabajo
Staging Area
Local Repository
Remote Repository
Working Directory
add
Staging Area
Local Repository
Remote Repository
commit
Working Directory
add
Staging Area
Local Repository
Remote Repository
Working Directory
commit -a
add
commit
Working Directory
Staging Area
Local Repository
Remote Repository
reset <file>
add
commit
commit -a
Working Directory
Staging Area
Local Repository
Remote Repository
reset <commit>
commit -a
reset <file>
add
commit
Working Directory
Staging Area
Local Repository
Remote Repository
push
commit -a
reset <file>
reset <commit>
add
commit
Working Directory
Staging Area
Local Repository
Remote Repository
push
commit -a
reset <file>
reset <commit>
add
commit
fetch
Working Directory
Staging Area
Local Repository
Remote Repository
push
commit -a
reset <file>
reset <commit>
add
commit
checkout
fetch
Working Directory
Staging Area
Local Repository
Remote Repository
push
commit -a
reset <file>
reset <commit>
pull
add
commit
fetch
checkout
Working Directory
Staging Area
Local Repository
Remote Repository
push
commit -a
reset <file>
reset <commit>
add
commit
fetch
checkout
pull
clone
Repositorio remoto
No existe repo local, crea repo remoto y lo clona localmente
workspace
repo remoto
repo
local
clone
git clone https://jc@bitbucket.org/gc/test.git
Clonar un repo remoto
Esta instrucción clona un repo remoto a un repo local y crea el folder del workspace
Proyecto iniciado
Crea un repo local y lo enlaza con un repo remoto
workspace
repo
local
add remote
git init
Inicializar el repo local
git remote add origin https://jc@bitbucket.org/gc/test.git
Asociar el repo local con el repo remoto
Inicializa un repo local en un folder (workspace)
Asocia el repo local con un repo remoto
repo remoto
Se asume que ya hay un repo remoto asociado
workspace
repo
local
# Agrega todos los cambios hechos
git add .
Modificar en el workspace
repo remoto
1
Agregar los cambios al Stage
2
# Agregar por nombre de archivo
git add index.html
También se puede ejecutar:
git commit -m "Mensaje descriptivo"
Publicar los cambios en el repo local
3
git push origin master
Publicar los cambios en el repo remoto
4
Working Directory
Staging Area
Local Repository
add
# Agrega un archivo específico
git add nombre-archivo
# Agrega todos los cambios
git add .
reset
# Recupera un archivo específico
git reset nombre-archivo
# Recupera todos los cambios
git reset .
commit
git commit -m "Mensaje descriptivo"
checkout
git checkout nombre-archivo
Origen
Destino
Github
Gitlab
Bitbucket
Repos públicos y privados
Gratis
Microsoft
Gitlab
Atlassian
Integración con otros servicios
Consola web
CI /CD
Documentación basada en Wiki
Issue tracker
Code review
Discusiones de código
Pull request
Github
Gitlab
Bitbucket
Microsoft
Gitlab
Atlassian
Creación de directorio .ssh
c:\Users\User\.ssh
Generación de llave ssh
ssh-keygen -o -t rsa -C "john@example.com"
id_rsa
id_rsa.pub
Llave pública
Llave privada
Abrir la llave pública y copiar su contenido
code id_rsa.pub
Abrir SSH Key en Github
Settings > SSH and GPG Keys
ssh-rsa AAAAB8NzaC1yc2EAAAADAQA111BgQC1xbavJmJeS9x35Elg+dTOlD3eEJaOsOZPfmnJO6FgsB98OFALxvtG0uuOMNi8FgY6jl92eBG/ZAJ/+k8yNL/gfmuW5amT9Ca8ZW6XEBA3ONCWM1DbDRDvu7Ht9DZAp72ID/ugkK6d18d0fFQteOUJwztE5flW42P73r7R8GrQcOvhN78SQGU5ZVcyi7d6yIcN13ZM4M2bHJxQP1l8qzVafvNuPA9UMtf0b7rRr1iPoxlMTo7C34COqsuFXnDct4G7wvh7/kwv6GHsejK2b8Vn9lTPf7a1k5uKeqL+y2MX4ws5rRiR3Qti5kebHUhh0DPErBErtdGl307x2bB3taWbTWIX9UCEcGwlOu3pC/gLYjbkRZmbWNxvzNqQHgV/SBcAc17PBNmoAur9hUM+DRIDtp7HFQKiAHa8rgs/f54w7AfQAJM3BpJi0771wUsm2KEcw9koMdEtMU0ETq5zvabcoagQ+FgFD97eYaawNRYVGqB/kl8YvWXRBJnbP1IDwtc= john@example.com
New SSH Key
Pegar la llave pública
1
2
3
4
Centralized Workflow
Master
Hotfix
Release
Develop
Feature
Feature
v0.1
v1.0
v1.1
v0.2
Git Workflow (gitflow)
Master
Hotfix
Release
Develop
Feature
Mantiene la versión oficial en producción de la aplicación
Permite hacer cambios urgentes a la versión en producción
Permite hacer cambios en el código antes de hacer la publicación en producción
Brinda a los programadores un espacio de trabajo sin afectar la aplicación en producción
Permite desarrollar cada característica del software sin afectar el trabajo de los demás programadores
Master
Hotfix
Release
Develop
Feature
Inicio del repositorio: rama Master
v0.1
Master
Hotfix
Release
Develop
Feature
A partir de la rama Master, se crea la rama Develop en la cual trabajan los programadores
v0.1
Master
Hotfix
Release
Develop
Feature
Cuando se desea desarrollar una nueva funcionalidad, el programador crea una rama Feature a partir de la rama Develop
v0.1
Master
Hotfix
Release
Develop
Feature
Otros desarrolladores pueden estar trabajando en otras características de la aplicación en sus respectivas ramas Feature
Feature
v0.1
Master
Hotfix
Release
Develop
Feature
Cuando un programador termina su trabajo, fusiona su rama Feature con la rama Develop
Feature
v0.1
Master
Hotfix
Release
Develop
Feature
Esta operación se repite para todos los programadores en cada una de sus ramas Feature
Feature
v0.1
Master
Hotfix
Release
Develop
Feature
Cuando todos los desarrolladores han hecho sus aportes a la rama Develop, se crea una rama Release donde se hacen ajustes para publicar en producción
Feature
v0.1
Master
Hotfix
Release
Develop
Feature
Una vez terminados los cambios en la rama Release, se hace una fusión con la rama Develop para reflejar todos los cambios realizados
Feature
v0.1
Master
Hotfix
Release
Develop
Feature
Posteriormente, se hace una fusión de la rama Release a la rama Master para publicar la aplicación
Feature
v0.1
v1.0
Master
Hotfix
Release
Develop
Feature
Si hay que hacer algún cambio urgente en producción se crea la rama Hotfix
Feature
v0.1
v1.0
Master
Hotfix
Release
Develop
Feature
Una vez finalizados los cambios urgentes, se hace fusión de la rama Hotfix a la rama Release para publicar la aplicación
Feature
v0.1
v1.0
v1.0.1
Master
Hotfix
Release
Develop
Feature
Para integrar el cambio urgente con el código de la aplicación, se hace una fusión de la rama Hotfix a la rama Develop
Feature
v0.1
v1.0
v1.0.1
Master
Hotfix
Release
Develop
Feature
Se pueden generar cambios urgentes en cualquier momento y siempre se debe hacer fusión con las ramas Master y Develop
Feature
v0.1
v1.0
v0.2
v1.0.1
johncardozo@gmail.com