2. Sergio Gómez - @sergiogomez
Una vida dedicada a la sonrisa, a mis niños, y al rock and roll
● Socio fundador de QuaiP.com
● Web Developer Ruby on Rails / HTML / CSS / jQuery
● SysOp LAMP, git…
● Coworker feliz en coSfera
Betabeers Córdoba XII
@sergiogomez
3. ● Desarrollo e infraestructuras avanzadas de VoIP
● Servidores de streaming de radio y TV
● Cloud, hosting avanzado, VPS y servidores dedicados
Betabeers Córdoba XII
@sergiogomez
4. git
+ Sistema de control de versiones distribuido, open source y gratuito
+ 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
Betabeers Córdoba XII
@sergiogomez
5. git + distribuido
Imagen: http://nvie.com/posts/a-successful-git-branching-model/
Betabeers Córdoba XII
@sergiogomez
6. git + licencia libre
+ GNU General Public License version 2
+ Algunas partes usan otras licencias, pero siempre compatibles con GPLv2
Betabeers Córdoba XII
@sergiogomez
7. git + instalación
+ Disponible en Linux, Mac OS X, Windows y Solaris
Debian/Ubuntu
$ apt-get install git
Fedora
$ yum install git
Gentoo
$ emerge --ask --verbose dev-vcs/git
Betabeers Córdoba XII
@sergiogomez
8. git + gitk (linux)
Betabeers Córdoba XII
@sergiogomez
9. git + gitx (mac)
Betabeers Córdoba XII
@sergiogomez
11. git + github for mac
Betabeers Córdoba XII
@sergiogomez
12. git + github for windows
Betabeers Córdoba XII
@sergiogomez
13. git + configuración
+ Necesario para identificar el trabajo que se realiza
$ git config --global user.name "Sergio Gómez"
$ git config --global user.email "sergio@quaip.com"
+ Puede ser distinto en cada repositorio
$ cd repositorio
$ git config user.name "Sergio Gómez"
$ git config user.email "sergiogomez@gmail.com"
Betabeers Córdoba XII
@sergiogomez
14. git + creación de un repositorio local
+ Puede crearse un repositorio desde cero
$ mkdir some-repository
$ cd some-repository
$ git init
+ O crearse desde una carpeta con código
$ cd project
$ git init
Betabeers Córdoba XII
@sergiogomez
15. git + 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.git
Cloning 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/
$ ls
AUTHORS
LICENSE
Makefile README.md
bin
cmd
deb
Betabeers Córdoba XII
@sergiogomez
16. git + 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
Betabeers Córdoba XII
@sergiogomez
17. git + staging area
+ Git usa un proceso de dos pasos para subir tus snapshots al repositorio:
Paso 1
Paso 2
añadir ficheros y cambios al staging area
git add
git commit confirmar ficheros y cambios al repositorio local
Imagen: http://graph1zzlle.github.io/posts/git-basics-revisited-part2/
Betabeers Córdoba XII
@sergiogomez
18. git + add
+ Es el comando con el que se añaden los cambios al staging area
$ git add README hello.rb
+ Se pueden subir todos los ficheros directamente
$ git add .
Betabeers Córdoba XII
@sergiogomez
19. git + commit
+ Es el comando con el que se suben los cambios del staging al repositorio
$ 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 staging area
$ git commit -a -m 'Cambios realizados'
Betabeers Córdoba XII
@sergiogomez
20. git + ¿se te ha escapado un commit?
Imagen: http://www.librodearena.com/post/rompetejas/la-petra-nada-una-mas-que-cagar-juntitos/4384204/311860
Betabeers Córdoba XII
@sergiogomez
21. git + amend
+ Permite corregir (enmendar) el último commit
$ git commit --amend
Betabeers Córdoba XII
@sergiogomez
22. git + diff
+ 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:
$ diff --git a/hello.rb b/hello.rb
index 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
Betabeers Córdoba XII
@sergiogomez
24. git + status
+ En todo momento podemos ver la situación de nuestra copia local:
+ 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
Betabeers Córdoba XII
$
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
git status
On branch master
Initial commit
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file:
new file:
README
hello.rb
Changed but
(use "git
(use "git
modified:
not updated:
add <file>..." to update what will be...
checkout -- <file>..." to discard chan... #
README
@sergiogomez
25. git + deshacer
+ Al contrario que en la vida real, en git es realmente sencillo volver hacia
atrás, deshacer acciones, e incluso reescribir la historia:
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^
Betabeers Córdoba XII
@sergiogomez
26. git + mover y borrar ficheros
+ Mover un fichero
$ git mv source target
+ Borrar un fichero
$ git rm -- path/to/file
+ Borrar una carpeta
$ git rn .r .. path/to/dir
Betabeers Córdoba XII
@sergiogomez
27. git + stash
+ Guardar los cambios sin subir al índice a una pila de cambios (stack)
$ git stash
+ Retomar los cambios y quitarlos de la pila
$ git stash pop
=
$ git stash apply; git stash drop
+ Ver pila de cambios
$ git stash list
+ Aplicar un cambio concreto de la pila
$ git stash apply stash@{1}
Betabeers Córdoba XII
@sergiogomez
28. git + branches
+ Crear rama
$ git branch nombre-de-rama
+ Cambiar a una rama
$ git checkout nombre-de-rama
+ Ver todas las ramas
$ git branch
+ Crear y cambiar a una rama (en un solo paso)
$ git checkout -b nombre-de-rama
Betabeers Córdoba XII
@sergiogomez
29. git + branches
+ Borrar rama (sólo si no estás en ella)
$ 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
Betabeers Córdoba XII
@sergiogomez
31. git + conflictos
+ Aparecen al intentar fusionar dos ramas que incluyan distintos cambios
sobre un mismo bloque de código
$ git merge nombre-de-rama
Auto-merging README
CONFLICT (content): Merge conflict in README
Automatic merge failed; fix conflicts and then commit the result.
$ cat README
<<<<<<< HEAD
Many 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
Betabeers Córdoba XII
@sergiogomez
32. git + 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
Betabeers Córdoba XII
@sergiogomez
33. git + tags
+ 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'
Betabeers Córdoba XII
@sergiogomez
34. git + repositorios remotos
+ Es lo habitual a la hora de colaborar con otros programadores (github…)
+ 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
git
git
git
git
remote
remote
remote
remote
remote
Betabeers Córdoba XII
add github git@github.com:git/git.git
rm github
rename github origin
set-url origin git://github.com/git/git.git
@sergiogomez
35. git + repositorios remotos
+ Descargar nuevas ramas y datos de un repositorio remoto sin fusionar
$ git fetch origin
+ Descargar nuevas ramas y datos de un repositorio remoto y fusionar
$ git pull origin
+ Subir rama y sus datos a un repositorio remoto
IMPORTANTE: Sólo podrá realizarse tras haber descargado todos los cambios pendientes
$ git push origin master
Betabeers Córdoba XII
@sergiogomez
36. github
+ Alojamiento de repositorios Git públicos y privados
+ Red social de desarrolladores
+ Gestión colaborativa de proyectos de código
+ Hosting de proyectos
Betabeers Córdoba XII
@sergiogomez
37. github + crear una cuenta
Betabeers Córdoba XII
@sergiogomez
38. github + crear un repositorio
Betabeers Córdoba XII
@sergiogomez
39. github + clonar un repositorio público
$ git clone git@github.com:rails/rails.git
Betabeers Córdoba XII
@sergiogomez
40. github + 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.
Betabeers Córdoba XII
@sergiogomez
42. github + red social de desarrolladores
+ Se puede navegar por todo el código de todos los repositorios públicos
Betabeers Córdoba XII
@sergiogomez
43. github + red social de desarrolladores
+ Puedes seguir a usuarios (como Twitter)
+ Puedes observar proyectos, y recibir notificaciones
cuando éstos tienen cambios
+ Puedes marcar proyectos como favoritos,
lo que te permite conocer cuáles son los
proyectos más populares (watchers + stars + forks)
Betabeers Córdoba XII
@sergiogomez