43
Sysmana 2014 @sergiogomez +

Git + Github - Sysmana 2014

  • Upload
    quaip

  • View
    513

  • Download
    2

Embed Size (px)

DESCRIPTION

Presentación de Git y Github en la Sysmana 2014, por Sergio Gómez

Citation preview

Page 1: Git + Github - Sysmana 2014

Sysmana 2014 @sergiogomez

+

Page 2: Git + Github - Sysmana 2014

Sysmana 2014 @sergiogomez

● Socio fundador de QuaiP.com

● Web Developer Ruby on Rails / HTML / CSS / jQuery

● SysOp LAMP, git…

Sergio Gómez - @sergiogomez“Una vida dedicada a la sonrisa, a mis niños, y al rock and roll”

Page 3: Git + Github - Sysmana 2014

Sysmana 2014 @sergiogomez

● Desarrollo e infraestructuras avanzadas de VoIP

● Servidores de streaming de radio y TV

● Web Hosting Avanzado, VPS y Servidores Dedicados

Page 4: Git + Github - Sysmana 2014

Sysmana 2014 @sergiogomez

git

+ Sistema de control de versiones distribuido gratuito y open source

+ Creado por Linus Torvalds, para su uso en el desarrollo del kernel de Linux

+ Rápido, sólido, estable y fácilmente conectable

+ Desde cero, o a partir de Subversion y CVS

Page 5: Git + Github - Sysmana 2014

Sysmana 2014 @sergiogomez

licencia

+ GNU General Public License version 2

+ Algunas partes usan otras licencias, pero siempre compatibles con GPLv2

Page 6: Git + Github - Sysmana 2014

Sysmana 2014 @sergiogomez

+ Disponible en Linux, Mac OS X, Windows y Solaris

instalación de git

Debian/Ubuntu$ apt-get install git

Fedora$ yum install git

Gentoo$ emerge --ask --verbose dev-vcs/git

Page 7: Git + Github - Sysmana 2014

Sysmana 2014 @sergiogomez

interfaces gráficas: gitk (linux)

Page 8: Git + Github - Sysmana 2014

Sysmana 2014 @sergiogomez

interfaces gráficas: gitx (mac)

Page 9: Git + Github - Sysmana 2014

Sysmana 2014 @sergiogomez

interfaces gráficas: gitx-dev (mac)

Page 10: Git + Github - Sysmana 2014

Sysmana 2014 @sergiogomez

interfaces gráficas: github for mac

Page 11: Git + Github - Sysmana 2014

Sysmana 2014 @sergiogomez

interfaces gráficas: github for windows

Page 12: Git + Github - Sysmana 2014

Sysmana 2014 @sergiogomez

+ Necesario para identificar el trabajo que se realiza

configuración de git

$ git config --global user.name "Sergio Gómez"$ git config --global user.email "[email protected]"

+ Puede ser distinto en cada repositorio

$ cd repositorio$ git config user.name "Sergio Gómez"$ git config user.email "[email protected]"

Page 13: Git + Github - Sysmana 2014

Sysmana 2014 @sergiogomez

creación de un repositorio local

+ O crearse desde una carpeta con código

$ cd project$ git init

+ Puede crearse un repositorio desde cero

$ mkdir some-repository$ cd some-repository$ git init

Page 14: Git + Github - Sysmana 2014

Sysmana 2014 @sergiogomez

clonar un repositorio remoto

+ Crea una copia local de un repositorio remoto para comenzar a trabajar directamente con él

$ git clone https://github.com/drone/drone.gitCloning into 'drone'...remote: Counting objects: 590, done.remote: Compressing objects: 100% (339/339), done.remote: Total 590 (delta 265), reused 519 (delta 227)Receiving objects: 100% (590/590), 176.08 KiB | 205.00 KiB/s, done.Resolving deltas: 100% (265/265), done.Checking connectivity... done$ cd drone/$ lsAUTHORS LICENSE Makefile README.md bin cmd deb

Page 15: Git + Github - Sysmana 2014

Sysmana 2014 @sergiogomez

snapshotting

+ En git, básicamente lo que hacemos es componer y guardar snapshots (instantáneas) de un proyecto, trabajar con ellas y compararlas

Imagen: http://slid.es/gruizdevilla/introduccion-a-git

Page 16: Git + Github - Sysmana 2014

Sysmana 2014 @sergiogomez

staging area (el índice)

+ Git usa un proceso de dos pasos para subir tus snapshots al repositorio:

Paso 1 git add añadir ficheros y cambios al índicePaso 2 git commit confirmar ficheros y cambios al repositorio local

Imagen: http://graph1zzlle.github.io/posts/git-basics-revisited-part2/

Page 17: Git + Github - Sysmana 2014

Sysmana 2014 @sergiogomez

+ Es el comando con el que se añaden los cambios al índice

add

$ git add README hello.rb

+ Se pueden subir todos los ficheros directamente

$ git add .

Page 18: Git + Github - Sysmana 2014

Sysmana 2014 @sergiogomez

+ Es el comando con el que se suben los cambios del índice al repositorio

commit

$ git commit

+ Es necesario incluir un mensaje que describa lo que se ha hecho

$ git commit -m 'Cambios realizados'

+ Añadir automáticamente todos los cambios en los ficheros del índice

$ git commit -a -m 'Cambios realizados'

Page 19: Git + Github - Sysmana 2014

Sysmana 2014 @sergiogomez

+ Es la forma (que usan los buenos) de ver el código que ha cambiado desde el último commit y que no ha sido subido al índice:

diferencias

$ diff --git a/hello.rb b/hello.rbindex d62ac43..8d15d50 100644--- a/hello.rb+++ b/hello.rb@@ -1,7 +1,7 @@ class HelloWorld

def self.hello- puts "hello world"+ puts "hola mundo" end

end

Page 20: Git + Github - Sysmana 2014

Sysmana 2014 @sergiogomez

git status

+ En todo momento podemos ver la situación de nuestra copia local:

$ git status# On branch master## Initial commit## Changes to be committed:# (use "git rm --cached <file>..." to unstage)## new file: README# new file: hello.rb## Changed but not updated:# (use "git add <file>..." to update what will be...# (use "git checkout -- <file>..." to discard chan... ## modified: README#

+ Ficheros cambiados y añadidos al índice listos para el siguiente commit+ Ficheros cambiados pero que no están añadidos al índice+ Ficheros sin registrar por el índice+ Rama en la que estás trabajando+ Número de commits que aún no están en el repositorio remoto

Page 21: Git + Github - Sysmana 2014

Sysmana 2014 @sergiogomez

+ Al contrario que en la vida real, en git es realmente sencillo volver hacia atrás, deshacer acciones, e incluso reescribir la historia:

deshacer

Quitar un fichero del índice que ha cambiado$ git reset HEAD -- path/to/file

Quitar un fichero nuevo del índice$ git rm --cached path/to/file

Quieres deshacer los cambios de un fichero que no está en el índice$ git checkout -- path/to/file

Has hecho un commit y lo quieres deshacer$ git reset --soft HEAD^

Page 22: Git + Github - Sysmana 2014

Sysmana 2014 @sergiogomez

+ Mover un fichero

mover y borrar ficheros

$ git mv source target

+ Borrar un fichero

$ git rm -- path/to/file

+ Borrar una carpeta

$ git rn .r .. path/to/dir

Page 23: Git + Github - Sysmana 2014

Sysmana 2014 @sergiogomez

+ Guardar los cambios sin subir al índice a una pila de cambios (stack)

stash

$ git stash

+ Retomar los cambios y quitarlos de la pila

+ Ver pila de cambios

$ git stash list

+ Aplicar un cambio concreto de la pila

$ git stash apply stash@{1}

=$ git stash pop $ git stash apply; git stash drop

Page 24: Git + Github - Sysmana 2014

Sysmana 2014 @sergiogomez

+ Crear rama

branches (ramas)

$ git branch nombre-de-rama

+ Cambiar a una rama

+ Ver todas las ramas

$ git branch

+ Crear y cambiar a una rama (en un solo paso)

$ git checkout -b nombre-de-rama

$ git checkout nombre-de-rama

Page 25: Git + Github - Sysmana 2014

Sysmana 2014 @sergiogomez

+ Borrar rama (sólo si no estás en ella)

branches (ramas)

$ git branch -d nombre-de-rama

+ Fusionar ramas (merge)Es uno de los pasos más importantes, y se usa para incorporar los cambios realizados en una rama a otra rama (por ejemplo, de la rama “nombre-de-rama” a la rama “master”)

$ git checkout master$ git merge nombre-de-rama

Page 26: Git + Github - Sysmana 2014

Sysmana 2014 @sergiogomez

flujo habitual de trabajo con ramas

Imagen: http://blogs.endjin.com/2013/04/a-step-by-step-guide-to-using-gitflow-with-teamcity-part-3-gitflow-commands/

Page 27: Git + Github - Sysmana 2014

Sysmana 2014 @sergiogomez

+ Aparecen al intentar fusionar dos ramas que incluyan distintos cambios sobre un mismo bloque de código

conflictos

$ git merge nombre-de-ramaAuto-merging READMECONFLICT (content): Merge conflict in READMEAutomatic merge failed; fix conflicts and then commit the result.$ cat README<<<<<<< HEADMany Hello World Examples=======Hello World Lang Examples>>>>>>> fix_readme

+ No se podrá hacer commit con la fusión de las ramas hasta que se resuelvan todos los conflictos

Page 28: Git + Github - Sysmana 2014

Sysmana 2014 @sergiogomez

log

+ Muestra el log completo

$ git log

+ Versión resumida (una línea por commit)

$ git log --oneline

+ Versión resumida en modo de grafo

$ git log --oneline --graph

Page 29: Git + Github - Sysmana 2014

Sysmana 2014 @sergiogomez

tags (etiquetas)

+ Similar al commit, permite etiquetar hitos del desarrollo (versiones)

$ git tag -a v1.0 -m 'Primera versión pública'

+ Puede realizarse sobre commits anteriores

$ git tag -a v0.9 15b56f1 -m 'Primera beta interna'

Page 30: Git + Github - Sysmana 2014

Sysmana 2014 @sergiogomez

repositorios remotos

+ Es lo habitual a la hora de colaborar con otros programadores+ También es útil para mantener copias remotas del código+ Pueden gestionarse en cualquier momento+ Un repositorio local puede conectarse con distintos repositorios remotos

+ Opciones para listar, añadir, eliminar, renombre y especificar URL

$ git remote$ git remote add github [email protected]:git/git.git$ git remote rm github$ git remote rename github origin$ git remote set-url origin git://github.com/git/git.git

Page 31: Git + Github - Sysmana 2014

Sysmana 2014 @sergiogomez

+ Descargar nuevas ramas y datos de un repositorio remoto sin fusionar

repositorios remotos

$ git fetch origin

+ Descargar nuevas ramas y datos de un repositorio remoto y fusionar

+ Subir rama y sus datos a un repositorio remoto

$ git push origin master

IMPORTANTE: Sólo podrá realizarse tras haber descargado todos los cambios pendientes

$ git pull origin

Page 32: Git + Github - Sysmana 2014

Sysmana 2014 @sergiogomez

github

+ Alojamiento de repositorios Git públicos y privados

+ Red social de desarrolladores

+ Gestión colaborativa de proyectos de código

+ Hosting de proyectos

Page 33: Git + Github - Sysmana 2014

Sysmana 2014 @sergiogomez

crear una cuenta

Page 34: Git + Github - Sysmana 2014

Sysmana 2014 @sergiogomez

crear un repositorio

Page 35: Git + Github - Sysmana 2014

Sysmana 2014 @sergiogomez

clonar un repositorio público

$ git clone [email protected]:rails/rails.git

Page 36: Git + Github - Sysmana 2014

Sysmana 2014 @sergiogomez

forks de repositorios públicos

+ Podemos trabajar con un “fork” a partir del código de otros repositorios

+ Clonamos nuestro “fork” en nuestro equipo+ Trabajamos con nuestra copia local (repositorio git)+ Hacemos un “pull request” si queremos que el usuario original añada nuestros cambios. Debemos explicar lo que hemos hecho y cómo se ha hecho (convencerlo), y él decidirá si los incluye y si hay que hacer más cambios.

Page 37: Git + Github - Sysmana 2014

Sysmana 2014 @sergiogomez

búsquedas

Page 38: Git + Github - Sysmana 2014

Sysmana 2014 @sergiogomez

+ Se puede navegar por todo el código de todos los repositorios públicos

red social de desarrolladores

Page 39: Git + Github - Sysmana 2014

Sysmana 2014 @sergiogomez

+ Puedes seguir a usuarios (como Twitter)

+ Puedes observar proyectos, y recibir notificacionescuando éstos tienen cambios

+ Puedes marcar proyectos como favoritos,lo que te permite conocer cuáles son losproyectos más populares (watchers + stars + forks)

red social de desarrolladores

Page 40: Git + Github - Sysmana 2014

Sysmana 2014 @sergiogomez

issues

Page 41: Git + Github - Sysmana 2014

Sysmana 2014 @sergiogomez

milestones

Page 42: Git + Github - Sysmana 2014

Sysmana 2014 @sergiogomez

+ git-scm.com + Página oficial de git+ try.github.io + Aprende git desde el navegador+ git-scm.com/book + Libro completo sobre git (licencia Creative Commons)+ www.codeschool.com/courses/try-git + Curso online gratuito de git+ gitref.org + Referencia de git+ guides.github.com + Guías de uso de github+ git-scm.com/docs/gitk + Manual de Gitk+ gitx.frim.nl + GitX+ rowanj.github.io/gitx + GitX-dev+ mac.github.com + GitHub Mac+ windows.github.com + GitHub Windows

links

Page 43: Git + Github - Sysmana 2014

Sysmana 2014 @sergiogomez

¡¡Muchas gracias!!

a Diego Castillo @dcastillobarnesDavid Muñoz @dperilla

José Ramón Albendín @jralbendin

y por supuestoA TODOS VOSOTROS