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
Generes un proyecto, vayas salvando sus cambios y puedas viajar en el tiempo con él.
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.
a) Entren a http://git-scm.com
b) Escoja dependiendo de Windows, Mac, Linux
1) Registran y guardan cada modificación del proyecto en un registro. Todo lo que modificas, lo vigilan.
2) Te dan acceso a este registro. Con esto, puedes gestionarlo, compartirlo, colaborarlo, administrarlo, editarlo, etc.
3) Podrás moverte hacia atrás o hacia adelante en diferentes momentos del proyecto.
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
Git 2014
Con nuestro proyecto portafolio, generaremos 3 versiones. Una estable, una experimental y una que fusionemos.
¡Practica! ¡Falla! ¡Experimenta!
2.1 Propuestas de proyectos
2.2 Ramas (Branches)
2.3 Fusiones (Merge)
¿Cómo puedo intervenir positivamente en el proyecto sin afectarlo?
¿Cómo puedo enfocarme en resolver un bug, un problema, sin afectar el avance de mi equipo?
Como profesionales, proponer es una de las habilidades más importantes para crecer dentro de una empresa.
Por ello, en GIT, existen las ramas, también conocidos como "branches".
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.
El concepto HEAD
¿En qué punto de la historia de nuestro proyecto nos encontramos?
Practiquemos ramas
git branch [nombre]
git log --oneline --graph --all
git config --global alias.log 'log --oneline --graph --all'
Repitamos el proceso de la fusión
git checkout [branch]
git checkout [branch]
git checkout [branch]
Hagamos la fusión
Fu...
...sión!
La fusión tiene la mezcla de los cambios de ambas ramas
Lo mejor de ambas, establecidas por el gestor del proyecto
Solución de conflictos
a) Fast-Forward
b) Manual Merge
Solución de conflictos
Fast-Forward
Los gestores trabajaron archivos diferentes al repositorio
Solución de conflictos
Manual Merge
¿Qué pasa cuando 2 desarrolladores trabajan el mismo archivo en la fusión?
Git 2014
1) Crear un repositorio en GitHub y vincularlo en local.
2) Subir nuestro portafolio a nuestro repositorio "forked" en GitHub.
1) GitHub & Workflows
2) Repositorios propios
3) Repositorios "forked"
Es una plataforma social para construir proyectos web.
Flujos de trabajo colaborativos.
¿Cómo logro que varios profesionales web trabajen sobre un mismo proyecto, sin morir en el intento?
Exploración: Git Clone
$ git clone [https or SSH]
$ git log (comprobar commits)
Git Clone
Git Clone
Git Clone
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
$ git init
$ git remote add origin [HTTPS or SSH]
$ git remote -v
Generamos cambios
$ git commit -am "[Mensaje]"
$ git push origin master
- 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
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")
Git 2014
- 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.
1) Deployment.
2) Ambientes
3) GitHub Pages.
4) Manual Deployment
Es la manera de llevar tus proyectos al mundo
Todas las actividades que hacen a un proyecto de software disponible para su uso
- 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.
SSH
Secure Shell
Autenticación - "Are you the owner?"
Clase 5 - #platzigit
El tiempo es el activo más valioso, no el dinero.
Automaticen y enfóquense en lo importante.
- Shell Scripts (.sh)
- Git Hooks
- Automatic Deployment
- Deploy Total en Server
Serie de comandos encapsulados dentro de un archivo .sh
Son scripts que se ejecutan antes, durante ó después de realizar un movimiento con GIT.
Estos scripts son archivos ".sh".
Git consta de 17 hooks
Documentación Completa y Actualizada
https://github.com/git/git/blob/master/Documentation/githooks.txt
Git consta de 17 hooks
post-commit
Después de generar un commit, genera estos comandos.
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
El manual deployment, automatizado.
- 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.
Si por una circunstancia extrema, no puedes usar GitHub.
Para este caso, existen los "bare repositories"
Un "bare repository" únicamente guarda el historial de cambios, con todos sus archivos, pero no pueden editarlos como tal.
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.
Git 2016
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?
Presupuesto_1.xls
Presupuesto_2.xls
Presupuesto_final.xls
Presupuesto_final_final.xls
Photoshop
Los amamos. En videojuegos los usamos.
¿Cómo aplica en proyectos?
Estructura para armar la historia del proyecto.
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]
$ git add [file or directory]
$ git commit -m "[Mensaje]""
$ git status
$ 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
$ git reset --hard [SHA commit]
$ git reset --mixed [SHA commit]
$ git reset --soft [SHA commit]
Git 2016
1. La importancia de proponer
2. Ramas
3. Fusiones
4. Proyecto de Marca Personal
git log --oneline --graph --all
git config --global alias.nicelog 'log --oneline --graph --all'
git checkout [branch]
git checkout [branch]
git checkout [branch]
La fusión tiene la mezcla de los cambios de ambas ramas
Lo mejor de ambas, establecidas por el gestor del proyecto
Solución de conflictos
a) Fast-Forward
b) Manual Merge
Solución de conflictos
Fast-Forward
Los gestores trabajaron archivos diferentes al repositorio
Solución de conflictos
Manual Merge
¿Qué pasa cuando 2 desarrolladores trabajan el mismo archivo en la fusión?
Git 2016
Wokflows
Repositorios personales
Repositorios "Forked"
GitHub Pages
Flujos de trabajo colaborativos.
¿Cómo logramos que varios profesionales trabajen sobre un proyecto de código sin matarse?
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.
Es un servicio de “hosting" de repositorios, a través de una interfaz web gráfica.
Descargar un proyecto con el objetivo de utilizarlo sin pensar en colaborar.
git clone [repositorio vía SSH ó HTTPS]
a) Proyectos creados por ti - Repositorios personales.
$ 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.
$ git init
$ git remote add origin [SSH]
$ git remote -v
$ git commit -am "[Mensaje]"
$ git push origin master
$ git remote add origin [SSH]
$ git fetch origin
$ git merge origin/master
** Desarrollamos **
$ git fetch origin
$ git merge origin/master
$ git push origin master
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
Git 2016
Git 2016
1) Deployment.
2) Ambientes
3) GitHub Pages.
4) Manual Deployment
SSH
Secure Shell
Autenticación - "Are you the owner?"
Git 2016
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
Agregar llaves a la cuenta de GitHub
$ cd ~/.ssh
$ cat id_rsa
# Insertamos en cuenta 1
$ cat mikecolombiano
# Insertamos en cuenta 2
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
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
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
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
Git 2016
#platzigit
#platzigit
#platzigit
"GitHub" privado, en tu servidor.
"GitHub" privado, en tu servidor.