Curso Profesional de Git & Github

@mikenieva - #platzigit


    Git 2014

  1. 1. Instalación
  2. 2. Ramas y fusiones
  3. 3. Workflows y colaboración remota
  4. 4. Manual Deployment + Project Management
  5. 5. Automatic Deployment + Git Hooks

  6. Desafíos

  7. 1. Crear un Blog en GitHub Pages
  8. 2. Blog universitario. Diseño.
  9. 3. Blog universitario. Deployment Automático.

    GIT 2016

  1. Instalación y conceptos básicos
  2. Navegación entre commits
  3. Workflows y repositorios remotos
  4. Project Management con GitHub
  5. Push To Deploy
  6. Workflows dinámicos con equipos
  7. Conceptos Avanzados
  8. Herramientas Útiles
  9. GUI's
  10. GitLab


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

The Web connects people. That’s what it does.

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

Hidden ideas don't ship, have no influence, no intersection with the market. They die, alone.

Ideas don't need a passport, and often cross borders (of all kinds) with impunity.

Show your ideas

Roadmap

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?

"Alone we are smart. Together we are brilliant."

- Steven Anderson. Learning Evangelist.
Aprender a colaborar.
¿Cómo se colabora y se gestionan proyectos HOY?

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


  1. Registro de todo el proyecto.
  2. Acceso a ese registro.
  3. Situarte en versiones del proyecto.

1.2 Introducción a GIT


GIT en el 2016


¿Qué es GIT?



1. Es un Sistema de Control de Versiones
2. Es Distribuido

Distribuido

Distribuido = Independiente

1.3 Arquitectura de Árbol

Estructura para armar la historia del proyecto.












1.4 Instalación

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
1.7 Navegación

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


Learning and innovation go hand in hand.

The arrogance of success is to think that what you did yesterday will be sufficient for tomorrow.
1. La importancia de proponer

En todos los proyectos, siempre existirán diferentes formas para resolver un problema.
1. La importancia de proponer

Sin embargo, el miedo a errar suele ser muy alto.
1. La importancia de proponer

¿De qué manera podemos ejecutar y reducir el riesgo de fallar el trabajo de muchas personas?
1. La importancia de proponer

Como profesionales, proponer es una de las habilidades más importantes para crecer dentro de una empresa.
2. Ramas

Una rama es una línea alterna del tiempo, en la historia de nuestro repositorio.
2. Ramas

Ideas - Features - Bug Fixes
Iniciamos con un commit. El primer commit.
Realizamos un segundo commit. Nota la flecha.

Tercer commit. La flecha se llama HEAD.

Un puntero que localiza el commit en el que estamos ubicados.

Notemos también la rama. Por defecto, SIEMPRE será master.


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


Ejercicio 3


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.