Curso Profesional de Git y GitHub - #platzigit
1. Instalación
Git 2014
"Fear isn't the enemy. Paralysis is the enemy."
Seth Godin
"Somos una revolución, un movimiento, una nueva generación tecnológica que abre, unida, el futuro de la Web"
Comunidad Platzi
Roadmap
Objetivo principal
Generes un proyecto, vayas salvando sus cambios y puedas viajar en el tiempo con él.
Empecemos con el contexto
1.1 Instalación y conceptos básicos
1.2 Sistemas de Control de Versiones.
1.3 ¿Qué es Git?
1.4 Arquitectura de Árbol.
1.5 Configurando GIT.
1.1 Instalación
a) Entren a http://git-scm.com
b) Escoja dependiendo de Windows, Mac, Linux
1.2 Sistemas de Control de Versiones
1.2 Sistemas de Control de Versiones
1) Registran y guardan cada modificación del proyecto en un registro. Todo lo que modificas, lo vigilan.
1.2 Sistemas de Control de Versiones
2) Te dan acceso a este registro. Con esto, puedes gestionarlo, compartirlo, colaborarlo, administrarlo, editarlo, etc.
1.2 Sistemas de Control de Versiones
3) Podrás moverte hacia atrás o hacia adelante en diferentes momentos del proyecto.
1.3 ¿Qué es GIT?
1.3 ¿Qué es GIT?
1.3 ¿Qué es GIT?
1.3 ¿Qué es GIT?
1.4 Arquitectura de árbol
1.4 Arquitectura de árbol
1.4 Arquitectura de árbol
1.4 Arquitectura de árbol
1.4 Arquitectura de árbol

1.5 Configuración
Abrir terminal, consola, bash
$ git --version
$ git config --global user.name "TU NOMBRE"
$ git config --global user.email "TU CORREO DE GITHUB"
$ git config --global color.ui true
$ git config --global --list
Ejercicio (70% de git)
Ejercicio (70% de git)
Ejercicio (70% de git)
2. Ramas y Fusiones
Git 2014
Roadmap
Objetivo principal
Con nuestro proyecto portafolio, generaremos 3 versiones. Una estable, una experimental y una que fusionemos.
Consejo:
¡Practica! ¡Falla! ¡Experimenta!
Empecemos con el contexto
2.1 Propuestas de proyectos
2.2 Ramas (Branches)
2.3 Fusiones (Merge)
2.1 Propuestas de Proyectos
¿Cómo puedo intervenir positivamente en el proyecto sin afectarlo?
2.1 Propuestas de Proyectos
¿Cómo puedo enfocarme en resolver un bug, un problema, sin afectar el avance de mi equipo?
2.1 Propuestas de Proyectos
Como profesionales, proponer es una de las habilidades más importantes para crecer dentro de una empresa.
2.1 Propuestas de Proyectos
Por ello, en GIT, existen las ramas, también conocidos como "branches".
2.2 Ramas
Una rama es una línea alterna del tiempo, en la historia de nuestro repositorio.
Funciona para crear features, arreglar bugs, experimentar, sin afectar la versión estable, la línea principal, del proyecto.
2.2 Ramas
2.2 Ramas
2.2 Ramas
2.2 Ramas
2.2 Ramas
2.2 Ramas
2.2 Ramas
El concepto HEAD
¿En qué punto de la historia de nuestro proyecto nos encontramos?
2.2 Ramas
Practiquemos ramas
git branch [nombre]
2.2 Ramas
git log --oneline --graph --all
git config --global alias.log 'log --oneline --graph --all'
2.3 Fusiones
Repitamos el proceso de la fusión
2.3 Fusiones
git checkout [branch]
2.3 Fusiones
git checkout [branch]
2.3 Fusiones
git checkout [branch]
2.3 Fusiones
Hagamos la fusión
2.3 Fusiones
Fu...
2.3 Fusiones
...sión!
2.3 Fusiones
La fusión tiene la mezcla de los cambios de ambas ramas
2.3 Fusiones
Lo mejor de ambas, establecidas por el gestor del proyecto
2.3 Fusiones
Solución de conflictos
a) Fast-Forward
b) Manual Merge
2.3 Fusiones
Solución de conflictos
Fast-Forward
Los gestores trabajaron archivos diferentes al repositorio
2.3 Fusiones
Solución de conflictos
Manual Merge
¿Qué pasa cuando 2 desarrolladores trabajan el mismo archivo en la fusión?
3. Workflows y colaboración remota
Git 2014
And movements take connected people and make change.
Roadmap
Objetivo Principal
1) Crear un repositorio en GitHub y vincularlo en local.
2) Subir nuestro portafolio a nuestro repositorio "forked" en GitHub.
Empecemos con el contexto
1) GitHub & Workflows
2) Repositorios propios
3) Repositorios "forked"
GitHub
Es una plataforma social para construir proyectos web.
Workflows
Flujos de trabajo colaborativos.
Workflows
¿Cómo logro que varios profesionales web trabajen sobre un mismo proyecto, sin morir en el intento?
Workflows
Exploración: Git Clone
$ git clone [https or SSH]
$ git log (comprobar commits)
Git Clone
Git Clone
Git Clone
GitHub Workflows
1) Repositorios propios (Sólo YO)
- Ustedes son los dueños de su proyecto
- Si alguien decide participar, ustedes deciden si aceptan sus propuestas
- Sirve para guardar proyectos, regularmente personales.
1) Crear un repositorio
2) Vincularlo con nuestra PC
3) Generar cambios y subirlos a GitHub
Subir cambios a GitHub
Subir cambios a GitHub
Subir cambios a GitHub
Subir cambios a GitHub
Subir cambios a GitHub
Subir cambios a GitHub
Subir cambios a GitHub
$ git init
$ git remote add origin [HTTPS or SSH]
$ git remote -v
Generamos cambios
$ git commit -am "[Mensaje]"
$ git push origin master
2) Repositorios propios (Yo + mi equipo)
- Es lo mismo que el proceso anterior.
- Todos los cambios que hagan nuestros colaboradores lo subirán al repositorio
- Es nuestra obligación, descargar los nuevos cambios antes y después de codificar.
Git Fetch & Git Merge
Git Fetch & Git Merge
Git Fetch & Git Merge
Git Fetch & Git Merge
Git Fetch & Git Merge
Git Fetch & Git Merge
Git Fetch & Git Merge
Git Fetch & Git Merge
Git Fetch & Git Merge
Git Fetch & Git Merge
Git Fetch & Git Merge
Creamos ó entramos a la carpeta de nuestro proyecto
$ git init (si apenas vamos a iniciar)
$ git remote add origin [HTTS or SSH]
$ git fetch origin
$ git merge origin/master
Hacen cambios
$ git fetch origin
$ git merge origin/master
$ git push origin master
GitHub Workflows
3) Repositorios "forked" (De 3º's, hay gestores)
- Ustedes no son los dueños pero quieren participar en el desarrollo.
- Los dueños del proyecto le dan la visión (que commits sí y que commits no)
- Todo esto a través del concepto de Pull Request (PR)
Repositorios "forked"
Necesitamos conectar 2 repositorios.
1) Su repositorio forked (el que se colocó en su cuenta de GitHub y son dueños)
2) El repositorio principal (no son dueños)
Repositorios "forked"
Repositorios "forked"
Repositorios "forked"
Repositorios "forked"
Repositorios "forked"
Repositorios "forked"
Ciclo final - Repositorios "forked"
Repositorios "forked"
La idea es:
- Siempre que vayamos a iniciar cambios, actualizarnos con el proyecto principal.
- Hacer nuestros cambios, experimentos, etc.
- Revisar nuevamente si no hubo cambios con el proyecto principal.
- Subir a nuestro forked repository todo lo que hemos hecho.
- Si queremos, crear un pull request para colaboración.
Repositorios "forked"
Crear ó entrar a la carpeta del proyecto
$ git remote add origin [HTTPS ó SSH del proyecto forked]
$ git remote add upstream [HTTPS ó SSH del proyecto "main"]
$ git fetch upstream
$ git merge origin/upstream
$ git fetch origin
$ git merge origin/master
Hacer cambios en local
$ git fetch upstream
$ git merge origin/upstream
$ git push origin master
Repositorios "forked"
Si queremos, realizamos un Pull Request al proyecto principal ("main")
Manual Deployment + Project Management
Git 2014
Ideas don't need a passport, and often cross borders (of all kinds) with impunity.
Show your ideasRoadmap
Objetivo Principal
- Subir nuestro portafolio a través de un GitHub Pages.
- Conocer el despliegue básico, utilizando GitHub, un servidor y SSH.
- Hacer un Flow de Issues para trabajo en equipo.
Empecemos con el contexto
1) Deployment.
2) Ambientes
3) GitHub Pages.
4) Manual Deployment
1) Deployment
Es la manera de llevar tus proyectos al mundo
1) Deployment
Todas las actividades que hacen a un proyecto de software disponible para su uso
1) Deployment
2) Ambientes
2) Ambientes Óptimos
2) Ambientes FTP
- Se pierde el código, se pierde todo
- Como no hay un SCV, el equipo puede encimar sus avances
- Si el código falla en producción, regresar al momento anterior es un caos.
3) GitHub Pages
3) GitHub Pages
3) GitHub Pages
4) Manual Deployment
4) Manual Deployment
4) Manual Deployment
4) Manual Deployment
4) Manual Deployment
4) Manual Deployment
SSH
Secure Shell
Autenticación - "Are you the owner?"
Curso Profesional de Git y GitHub
Clase 5 - #platzigit
El tiempo es el activo más valioso, no el dinero.
Automaticen y enfóquense en lo importante.
Roadmap
Temario
- Shell Scripts (.sh)
- Git Hooks
- Automatic Deployment
- Deploy Total en Server
Shell Scripts
Serie de comandos encapsulados dentro de un archivo .sh
Shell Scripts
Shell Scripts
Git Hooks
Son scripts que se ejecutan antes, durante ó después de realizar un movimiento con GIT.
Estos scripts son archivos ".sh".
Git Hooks
Git consta de 17 hooks
Git Hooks
Documentación Completa y Actualizada
https://github.com/git/git/blob/master/Documentation/githooks.txt
Git Hooks
Git consta de 17 hooks
Git Hooks
post-commit
Después de generar un commit, genera estos comandos.
Git Hooks - post-commit
Git Hooks (ejemplo)
post-commit
Creamos una carpeta.
Buscamos el .git/hooks
Activamos el post-commit (.sh) con nuestro código
Le damos permisos ($ chmod +x post-commit)
Subimos un commit a GitHub
Automatic Deployment
El manual deployment, automatizado.
Automatic Deployment
- Creamos una carpeta
- Jalamos un repositorio de GitHub
- Creamos un archivo .gitignore y deploy.sh
- Generamos cambios
- Creamos el Git Hook y lo llenamos
- Autorizamos el Git Hook
- Con .gitignore, pedimos ignorar archivos .sh
- En deploy.sh, escribimos los comandos que correran en servidor
- Revisamos que el servidor tenga SSH pero no password verification
- Creamos nuestra carpeta donde correrá la aplicación
Generamos un commit en local y que corra todo.
Deploy total en Server
Si por una circunstancia extrema, no puedes usar GitHub.
Para este caso, existen los "bare repositories"
Deploy total en Server
Un "bare repository" únicamente guarda el historial de cambios, con todos sus archivos, pero no pueden editarlos como tal.
Deploy total en Server
Deploy total en Server
Crearemos un "GitHub" dentro del servidor, una carpeta que será nuestra central de repositorios ó proyectos.
Posteriormente, desplegamos en servidor, dentro de la carpeta de la app.
Deploy total en Server
Deploy total en Server
Deploy total en Server
1. Instalación y conceptos básicos
Git 2016
Roadmap
Temario
1.1 Sistemas de Control de Versiones
1.2 Introducción a GIT
1.3 Arquitectura de árbol
1.4 Instalación
1.5 Configuración
1.6 "Git Workflow" - Base
1.7 Navegación
1.8 Reset
¿Por qué GIT?
- Steven Anderson. Learning Evangelist.
Con sistemas de control de versiones.

Todos hemos hecho SCV.
Presupuesto_1.xls
Presupuesto_2.xls
Presupuesto_final.xls
Presupuesto_final_final.xls

Photoshop
Incluso en Microsoft Word

Los amamos. En videojuegos los usamos.

¿Cómo aplica en proyectos?

1.1 Sistemas de Control de Versiones
- Registro de todo el proyecto.
- Acceso a ese registro.
- Situarte en versiones del proyecto.
1.2 Introducción a GIT

¿Qué es GIT?
1. Es un Sistema de Control de Versiones
2. Es Distribuido


Estructura para armar la historia del proyecto.



1.5 Configuración
Abrir terminal, consola, bash
$ git --version
$ git config --global user.name "TU NOMBRE"
$ git config --global user.email "TU CORREO DE GITHUB"
$ git config --global --list
$ git help [comando a buscar]
1.6 Git Workflow - Iteración Básica

Iteración básica
$ git add [file or directory]
$ git commit -m "[Mensaje]""
$ git status
Analizando un commit
Analizando un commit
Analizando un commit
Analizando un commit
Para conocer todo el historial de un proyecto, utilizamos:
$ git log
$ git config --global alias.[su palabra] "[comando]"
git log --graph --abbrev-commit --decorate --date=relative --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(bold yellow)%d%C(reset)' --all
1.8 Reset
Hard: Working Directory = Staging Area = Repository
$ git reset --hard [SHA commit]
1.8 Reset
Mixed: Staging Area = Repository. Nada con Working Directory. Iteración básica.
$ git reset --mixed [SHA commit]
1.8 Reset
Soft: Cambios sólo en el "Repository". Staging = Working
$ git reset --soft [SHA commit]
2. Navegación entre commits
Git 2016
Roadmap
Temario
1. La importancia de proponer
2. Ramas
3. Fusiones
4. Proyecto de Marca Personal
The arrogance of success is to think that what you did yesterday will be sufficient for tomorrow.
En todos los proyectos, siempre existirán diferentes formas para resolver un problema.
Sin embargo, el miedo a errar suele ser muy alto.
¿De qué manera podemos ejecutar y reducir el riesgo de fallar el trabajo de muchas personas?
Como profesionales, proponer es una de las habilidades más importantes para crecer dentro de una empresa.
Una rama es una línea alterna del tiempo, en la historia de nuestro repositorio.
Ideas - Features - Bug Fixes
Tercer commit. La flecha se llama HEAD.
Un puntero que localiza el commit en el que estamos ubicados.


En este momento, crearemos una rama. Y la flecha se mantendrá en el mismo commit.

Esto sucede porque, aunque estamos situados en la nueva rama, no hemos creado ningún commit.

Vamos a crearlo...

Acaba de separarse la nueva rama y con él, el primer commit.

Y podemos avanzar, con la rama experimental, con cambios separados.

Si necesitamos regresar a la rama principal, utilizamos:

Y avanzamos. Sin problema, continuamos con el proyecto formal.

Al final, si queremos absorber los cambios, utilizamos:

2.2 Ramas
git log --oneline --graph --all
git config --global alias.nicelog 'log --oneline --graph --all'
2.3 Fusiones
2.3 Fusiones
git checkout [branch]
2.3 Fusiones
git checkout [branch]
2.3 Fusiones
git checkout [branch]
2.3 Fusiones
2.3 Fusiones
2.3 Fusiones
2.3 Fusiones
La fusión tiene la mezcla de los cambios de ambas ramas
2.3 Fusiones
Lo mejor de ambas, establecidas por el gestor del proyecto
2.3 Fusiones
Solución de conflictos
a) Fast-Forward
b) Manual Merge
2.3 Fusiones
Solución de conflictos
Fast-Forward
Los gestores trabajaron archivos diferentes al repositorio
2.3 Fusiones
Solución de conflictos
Manual Merge
¿Qué pasa cuando 2 desarrolladores trabajan el mismo archivo en la fusión?
Rebase
Rebase
Rebase
Rebase
3. Workflows y repositorios remotos
Git 2016
Roadmap
Temario
Wokflows
Repositorios personales
Repositorios "Forked"
GitHub Pages
Workflows
Flujos de trabajo colaborativos.
Workflows
¿Cómo logramos que varios profesionales trabajen sobre un proyecto de código sin matarse?
Workflows

¿Qué es GitHub?
Plataforma en la cual desarrolladores suben sus proyectos de código, con el objetivo de mejorarlos a través de la colaboración y gestión.
¿Qué es GitHub?
Es un servicio de “hosting" de repositorios, a través de una interfaz web gráfica.
GitHub funciona en 2 bases:
- Exploración (Clone)
- Colaboración
GitHub - Exploración (Clone)
Descargar un proyecto con el objetivo de utilizarlo sin pensar en colaborar.
GitHub - Exploración (Clone)
git clone [repositorio vía SSH ó HTTPS]
GitHub - Exploración (Clone)

GitHub - Exploración (Clone)

GitHub - Exploración (Clone)

Ejercicio 1
GitHub - Colaboración (Workflows)
a) Proyectos creados por ti - Repositorios personales.
- Eres propietario del proyecto.
- Personas alrededor proponen y tú decides si aceptar ó no.
- Proyectos personales, generalmente.
Conectarnos con GitHub
1. Crear usuario.
2. Crear repositorio.
3. Conectar con llave SSH a GitHub, desde tu área local.
$ ssh-keygen -t rsa -b 4096 -C "[email de GitHub]"
Dar enter. Aceptar la localización por defecto.
Contraseña.
$ cd ~/.ssh
$ cat id_rsa.pub
Copiamos la llave y la pegamos en Settings > SSH, dentro de GitHub.
Conectarnos con GitHub
4. Iteración básica en tu área local y subir a GitHub:
$ git init
$ git remote add origin [SSH]
$ git remote -v
$ git commit -am "[Mensaje]"
$ git push origin master
Ejercicio 2
GitHub - Colaboración (Workflows)
b) Proyectos creados por tu organización ó equipos.
- Son propietarios del proyecto.
- Todos suben cambios, sin pedir permisos.
- Siempre verificar cambios nuevos antes de subir propios.
Git Fetch + Git Merge
Git Fetch + Git Merge
Git Fetch + Git Merge
Git Fetch + Git Merge
Git Fetch + Git Merge
Git Fetch + Git Merge
Git Fetch + Git Merge
Git Fetch + Git Merge
Git Fetch + Git Merge
Git Fetch + Git Merge
Git Fetch + Git Merge
$ git remote add origin [SSH]
$ git fetch origin
$ git merge origin/master
** Desarrollamos **
$ git fetch origin
$ git merge origin/master
$ git push origin master
GitHub - Colaboración (Workflows)
c) Proyectos de terceros. (Repositorios “forked”)
- No son dueños, pero quieren colaborar en el desarrollo.
- Los propietarios aceptan y rechazan propuestas a través de “Pull Request”.
GitHub - Colaboración (Workflows)
c) Proyectos de terceros. (Repositorios “forked”)
Existirán 2 repositorios:
a) El repositorio original.
b) El repositorio forked (La réplica del original, en tu cuenta de GitHub).
c) Proyectos de terceros. (Repositorios “forked”)

c) Proyectos de terceros. (Repositorios “forked”)

c) Proyectos de terceros. (Repositorios “forked”)

c) Proyectos de terceros. (Repositorios “forked”)

c) Proyectos de terceros. (Repositorios “forked”)

c) Proyectos de terceros. (Repositorios “forked”)

c) Proyectos de terceros. (Repositorios “forked”)

Proceso de repositorios “Forked"
- Actualizarnos siempre con el repositorio principal, antes de comenzar.
- Desarrollar y, antes de subir a nuestro repositorio “forked”, revisar nuevamente cambios.
- Subir a nuestro repositorio “forked” todo lo que hemos hecho.
- Ejecutar un “Pull Request"
Proceso de repositorios “Forked"
Crear ó entrar a la carpeta del proyecto
$ git remote add origin [HTTPS ó SSH del proyecto forked]
$ git remote add upstream [HTTPS ó SSH del proyecto principal]
$ git fetch upstream
$ git merge origin/upstream
$ git fetch origin
$ git merge origin/master
Hacer cambios en local
$ git fetch upstream
$ git merge origin/upstream
$ git push origin master
Ejercicio Final
4. Project Management con GitHub
Git 2016
Roadmap
Temario
Project Management
Issues
Milestones
Tags
Usuarios
Pull Request en equipos
Ambientes
Ambientes
Project Management
GitHub cuenta con un gestor para proyectos.
5. Push To Deploy
Git 2016
Empecemos con el contexto
1) Deployment.
2) Ambientes
3) GitHub Pages.
4) Manual Deployment
Manual Deployment
Manual Deployment
Manual Deployment
Manual Deployment
Manual Deployment
Manual Deployment
SSH
Secure Shell
Autenticación - "Are you the owner?"
6. Workflows dinámicos con equipos
Git 2016
Roadmap
Ejercicio
Creación de multiusuarios en local
Repositorios propios con Push
Repositorios forked con Pull Requests
Deploy en Amazon Web Services
Creación de multiusuarios en local
Llaves
$ cd ~/.ssh
$ ssh-keygen -t rsa -C "cuenta1@hola.com"
# Este será id_rsa
$ ssh-keygen -t rsa -C "cuenta2@hola.com"
# Este será mikecolombiano
Creación de multiusuarios en local
Agregar llaves a la cuenta de GitHub
$ cd ~/.ssh
$ cat id_rsa
# Insertamos en cuenta 1
$ cat mikecolombiano
# Insertamos en cuenta 2
Creación de multiusuarios en local
Archivo config en local
$ cd ~/.ssh
$ touch config
$ vim config
# githubCuenta1
Host cuenta1
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa
# githubCuenta2
Host cuenta2
HostName github.com
User git
IdentityFile ~/.ssh/mikecolombiano
Creación de multiusuarios en local
Probamos las llaves
Borramos llaves de caché
$ ssh-add -D
Agregamos nuevas llaves
$ ssh-add id_rsa
$ ssh-add mikecolombiano
Hacemos test de que funcionen las llaves
$ ssh -T cuenta1
$ ssh -T cuenta2
Creación de multiusuarios en local
Verificamos las cuentas
Creamos carpeta mikenieva
Creamos carpeta mikecolombiano
Los conectamos remotamente
Cuenta 1
$ git remote add origin git@cuenta1:universidadplatzi/blog-universidad.git
Cuenta 2
$ git remote add origin git@cuenta2:universidadplatzi/blog-universidad.git
En cuenta 2, configuramos
git config user.name "Mike Colombiano"
git config user.email "m@platzi.com"
En ambos, ejecutamos.
$ git pull origin master
Push de ambos owners
Verificamos las cuentas
Creamos carpeta mikenieva
Creamos carpeta mikecolombiano
Los conectamos remotamente
Cuenta 1
$ git remote add origin git@cuenta1:universidadplatzi/blog-universidad.git
Cuenta 2
$ git remote add origin git@cuenta2:universidadplatzi/blog-universidad.git
En ambos, ejecutamos.
$ git pull origin master
Push de ambos owners
Pull Request
Deployment
7. Conceptos Avanzados
Git 2016
8. Herramientas Útiles
#platzigit
9.GUI's
#platzigit
¿Qué es un Graphical User Interface (GUI)?
GitHub for Windows
GitHub for Mac
10. GitLab
#platzigit
¿Qué es GitLab?
"GitHub" privado, en tu servidor.
¿Qué es GitLab?
"GitHub" privado, en tu servidor.