Git & Github II
Max Cruz
https://www.linkedin.com/in/max-cruz/
https://github.com/maxcruz
Agenda
● Repaso
● GitFlow
● Propuesta
● Instalando Git
● Configuración
● Comandos básicos
● Obtener ayuda
● Ejercicio
Repaso
● Git & GitHub
● Breve historia de Git
● ¿Por qué Git/GitHub?
● Contribuyendo a un proyecto (Forking)
● Trabajo en paralelo (Branching)
● Construyendo el cambio (Commit)
● Entregar respetuosamente (Pull Request)
● Calidad en el código (Code Review)
● Uniendo el trabajo (Merge)
Git: The Three States
Git tiene tres estados principales en los que pueden
residir tus archivos:
Committed significa que los datos se almacenan de
forma segura en su base de datos local.
Modified significa que ha cambiado el archivo pero
aún no lo ha enviado a su base de datos.
Staged significa que ha marcado un archivo
modificado en su versión actual para ir a su próximo
commit snapshot.
GitFlow
Define un modelo estricto de ramificaciones (branches) diseñado
entorno a las publicaciones de un proyecto. Esto proporciona un marco
de trabajo robusto para manejar grandes proyectos.
● Ideal para proyectos con flujos de publicación cíclicos
● Asigna roles específicos a cada branch
● Define cómo y cuándo debería de interactuar con cada rama
Master & Develop
Features
Release
Hotfix
Propuesta: Forking / Feature Branch
Le da a cada desarrollador su propio repositorio del lado del servidor.
Esto significa que cada colaborador no tiene uno, sino dos repositorios
Git: uno privado y uno público compartido.
● Es el modelo más usado en proyectos open-source
● Permite tener una versión simplificada de GitFlow
● Las contribuciones se pueden integrar por separado
● Evitar distribuir accesos de escritura en el repositorio principal
Fork / Feature Branch
Fork / Feature Branch
Actualizar master con los
cambios en upstream
Master
(Fork)
Feature
Actualizar master
nuevamente para obtener
los cambios integrados
Push del feature branch
a origin y PR a master
en upstream
Instalando Git
Linux
Mediante la herramienta básica
de administración de paquetes
que trae tu distribución
# pacman -Syu git
# apt-get install git
# yum install git
OSX
En Mavericks (10.9) o superior
puedes hacer esto desde el
Terminal si intentas ejecutar git
por primera vez. Si no lo tienes
instalado, te preguntará si deseas
instalarlo.
http://git-scm.com/download/mac
Windows
Descargar el instalador, abrir el
archivo .exe con permisos de
administración y seguir las
instrucciones del asistente.
http://git-scm.com/download/win
https://github.com/robbyrussell/oh-my-zsh
Linux / OSX
https://github.com/dahlbyk/posh-git
Windows
Configuración
1. Archivo /etc/gitconfig: Contiene valores para todos los usuarios del sistema y todos sus
repositorios. Si pasas la opción --system a git config, lee y escribe específicamente en este
archivo.
2. Archivo ~/.gitconfig o ~/.config/git/config: Este archivo es específico a tu usuario. Puedes
hacer que Git lea y escriba específicamente en este archivo pasando la opción --global.
3. Archivo config en el directorio de Git (es decir, .git/config) del repositorio que estés
utilizando actualmente: Este archivo es específico al repositorio actual.
Configuración: Git
Identidad:
$ git config --global user.name "Max Cruz"
$ git config --global user.email max.raul@gmail.com
Editor:
$ git config --global core.editor vim
Color:
$ git config --global color.ui true
Consultar:
$ git config --list
Configuración: Git
No hacer backup al resolver conflictos:
$ git config --global mergetool.keepBackup false
Herramienta para ver diferencias:
$ git config --global diff.tool vimdiff
Herramienta para fusionar:
$ git config --global merge.tool vimdiff
Consultar:
$ git config --list
Configuración: GitHub
Paquetes:
# pacman -Ss openssh git xclip
Llave SSH:
$ ssh-keygen -t rsa -b 4096
Agregar la llave al ssh-agent:
$ eval "$(ssh-agent -s)"
$ ssh-add ~/.ssh/id_rsa
Configuración: GitHub
Copiar la llave SSH:
$ xclip -sel clip <
~/.ssh/id_rsa.pub
Pegar la llave en la cuenta de GitHub
Settings -> SSH keys -> Add SSH key
Probar la conexión:
$ ssh -T git@github.com
Comandos básicos
Crear un nuevo repositorio:
$ git init
Clonar un repositorio remoto:
$ git clone username@host:/path/to/repository
Agregar un origen remoto al repositorio :
$ git remote add upstream username@host:/path/to/repository
Sincronizar las ramas remotas:
$ git fetch --all
Cambiar de rama:
$ git checkout master
Crear una nueva rama y cambiarnos a ella:
$ git checkout -b feature_x
Subir una rama al origen:
$ git push origin feature_x
Eliminar una rama local:
$ git branch -d feature_x
Eliminar una rama en el origen:
$ git push -d origin feature_x
Listar las ramas:
$ git branch
Consultar el estado de los archivos:
$ git status
Agregar un archivo al siguiente commit:
$ git add archivo.txt
Quitar un archivo del siguiente commit:
$ git reset archivo.txt
Hacer commit local de los archivos que he agregado:
$ git commit -m "Commit message"
Subir los cambios al repositorio:
$ git push origin feature_x
Actualizar los cambios del branch:
$ git pull upstream master
Fusionar una rama (Git intenta hacer merge automático):
$ git merge master
Resolver conflictos:
$ git mergetool
Ver conflictos entre ramas:
$ git diff source_branch target_branch
Luego de resolver los conflictos se deben agregar los archivos modificados y hacer un
commit con los resultados de la fusión.
Agregar un archivo al último commit:
$ git commit -m “Initial Commit”
$ git add forgotten_file.txt
$ git commit --amend
Deshacer el último commit conservando los cambios:
$ git reset --soft HEAD^
Deshacer el último commit (CUIDADO):
$ git reset --hard HEAD^
Quitar un archivo del repositorio sin eliminarlo:
$ git rm --cached archivo.txt
Log de cambios con gráfico ASCII o con el detalle de los archivos:
$ git log --graph --oneline --decorate --all
$ git log --name-status
Agregar archivos de forma interactiva:
$ git add -i
Poner un TAG a un commit específico:
$ git tag 1.0.0 1b2e1d63ff
Mover los archivos agregados pendientes de commit a un branch distinto:
$ git stash
$ git checkout -b branch_name
$ git stash apply
Obtener ayuda
Ejercicio
https://github.com/jlord/git-it-electron

Git & GitHub Part II

  • 1.
    Git & GithubII Max Cruz https://www.linkedin.com/in/max-cruz/ https://github.com/maxcruz
  • 2.
    Agenda ● Repaso ● GitFlow ●Propuesta ● Instalando Git ● Configuración ● Comandos básicos ● Obtener ayuda ● Ejercicio
  • 3.
    Repaso ● Git &GitHub ● Breve historia de Git ● ¿Por qué Git/GitHub? ● Contribuyendo a un proyecto (Forking) ● Trabajo en paralelo (Branching) ● Construyendo el cambio (Commit) ● Entregar respetuosamente (Pull Request) ● Calidad en el código (Code Review) ● Uniendo el trabajo (Merge)
  • 4.
    Git: The ThreeStates Git tiene tres estados principales en los que pueden residir tus archivos: Committed significa que los datos se almacenan de forma segura en su base de datos local. Modified significa que ha cambiado el archivo pero aún no lo ha enviado a su base de datos. Staged significa que ha marcado un archivo modificado en su versión actual para ir a su próximo commit snapshot.
  • 5.
    GitFlow Define un modeloestricto de ramificaciones (branches) diseñado entorno a las publicaciones de un proyecto. Esto proporciona un marco de trabajo robusto para manejar grandes proyectos. ● Ideal para proyectos con flujos de publicación cíclicos ● Asigna roles específicos a cada branch ● Define cómo y cuándo debería de interactuar con cada rama
  • 6.
  • 7.
  • 8.
  • 9.
  • 11.
    Propuesta: Forking /Feature Branch Le da a cada desarrollador su propio repositorio del lado del servidor. Esto significa que cada colaborador no tiene uno, sino dos repositorios Git: uno privado y uno público compartido. ● Es el modelo más usado en proyectos open-source ● Permite tener una versión simplificada de GitFlow ● Las contribuciones se pueden integrar por separado ● Evitar distribuir accesos de escritura en el repositorio principal
  • 12.
  • 13.
    Fork / FeatureBranch Actualizar master con los cambios en upstream Master (Fork) Feature Actualizar master nuevamente para obtener los cambios integrados Push del feature branch a origin y PR a master en upstream
  • 14.
    Instalando Git Linux Mediante laherramienta básica de administración de paquetes que trae tu distribución # pacman -Syu git # apt-get install git # yum install git OSX En Mavericks (10.9) o superior puedes hacer esto desde el Terminal si intentas ejecutar git por primera vez. Si no lo tienes instalado, te preguntará si deseas instalarlo. http://git-scm.com/download/mac Windows Descargar el instalador, abrir el archivo .exe con permisos de administración y seguir las instrucciones del asistente. http://git-scm.com/download/win
  • 15.
  • 16.
    Configuración 1. Archivo /etc/gitconfig:Contiene valores para todos los usuarios del sistema y todos sus repositorios. Si pasas la opción --system a git config, lee y escribe específicamente en este archivo. 2. Archivo ~/.gitconfig o ~/.config/git/config: Este archivo es específico a tu usuario. Puedes hacer que Git lea y escriba específicamente en este archivo pasando la opción --global. 3. Archivo config en el directorio de Git (es decir, .git/config) del repositorio que estés utilizando actualmente: Este archivo es específico al repositorio actual.
  • 17.
    Configuración: Git Identidad: $ gitconfig --global user.name "Max Cruz" $ git config --global user.email max.raul@gmail.com Editor: $ git config --global core.editor vim Color: $ git config --global color.ui true Consultar: $ git config --list
  • 18.
    Configuración: Git No hacerbackup al resolver conflictos: $ git config --global mergetool.keepBackup false Herramienta para ver diferencias: $ git config --global diff.tool vimdiff Herramienta para fusionar: $ git config --global merge.tool vimdiff Consultar: $ git config --list
  • 19.
    Configuración: GitHub Paquetes: # pacman-Ss openssh git xclip Llave SSH: $ ssh-keygen -t rsa -b 4096 Agregar la llave al ssh-agent: $ eval "$(ssh-agent -s)" $ ssh-add ~/.ssh/id_rsa
  • 20.
    Configuración: GitHub Copiar lallave SSH: $ xclip -sel clip < ~/.ssh/id_rsa.pub Pegar la llave en la cuenta de GitHub Settings -> SSH keys -> Add SSH key Probar la conexión: $ ssh -T git@github.com
  • 21.
    Comandos básicos Crear unnuevo repositorio: $ git init Clonar un repositorio remoto: $ git clone username@host:/path/to/repository Agregar un origen remoto al repositorio : $ git remote add upstream username@host:/path/to/repository Sincronizar las ramas remotas: $ git fetch --all Cambiar de rama: $ git checkout master
  • 22.
    Crear una nuevarama y cambiarnos a ella: $ git checkout -b feature_x Subir una rama al origen: $ git push origin feature_x Eliminar una rama local: $ git branch -d feature_x Eliminar una rama en el origen: $ git push -d origin feature_x Listar las ramas: $ git branch
  • 23.
    Consultar el estadode los archivos: $ git status Agregar un archivo al siguiente commit: $ git add archivo.txt Quitar un archivo del siguiente commit: $ git reset archivo.txt Hacer commit local de los archivos que he agregado: $ git commit -m "Commit message" Subir los cambios al repositorio: $ git push origin feature_x
  • 24.
    Actualizar los cambiosdel branch: $ git pull upstream master Fusionar una rama (Git intenta hacer merge automático): $ git merge master Resolver conflictos: $ git mergetool Ver conflictos entre ramas: $ git diff source_branch target_branch Luego de resolver los conflictos se deben agregar los archivos modificados y hacer un commit con los resultados de la fusión.
  • 25.
    Agregar un archivoal último commit: $ git commit -m “Initial Commit” $ git add forgotten_file.txt $ git commit --amend Deshacer el último commit conservando los cambios: $ git reset --soft HEAD^ Deshacer el último commit (CUIDADO): $ git reset --hard HEAD^ Quitar un archivo del repositorio sin eliminarlo: $ git rm --cached archivo.txt
  • 26.
    Log de cambioscon gráfico ASCII o con el detalle de los archivos: $ git log --graph --oneline --decorate --all $ git log --name-status Agregar archivos de forma interactiva: $ git add -i Poner un TAG a un commit específico: $ git tag 1.0.0 1b2e1d63ff Mover los archivos agregados pendientes de commit a un branch distinto: $ git stash $ git checkout -b branch_name $ git stash apply
  • 27.
  • 28.