Git + Github - Sysmana 2014
-
Upload
quaip -
Category
Technology
-
view
549 -
download
2
description
Transcript of Git + Github - Sysmana 2014
Sysmana 2014 @sergiogomez
+
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”
Sysmana 2014 @sergiogomez
● Desarrollo e infraestructuras avanzadas de VoIP
● Servidores de streaming de radio y TV
● Web Hosting Avanzado, VPS y Servidores Dedicados
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
Sysmana 2014 @sergiogomez
licencia
+ GNU General Public License version 2
+ Algunas partes usan otras licencias, pero siempre compatibles con GPLv2
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
Sysmana 2014 @sergiogomez
interfaces gráficas: gitk (linux)
Sysmana 2014 @sergiogomez
interfaces gráficas: gitx (mac)
Sysmana 2014 @sergiogomez
interfaces gráficas: gitx-dev (mac)
Sysmana 2014 @sergiogomez
interfaces gráficas: github for mac
Sysmana 2014 @sergiogomez
interfaces gráficas: github for windows
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]"
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
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
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
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/
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 .
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'
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
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
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^
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
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
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
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
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/
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
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
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'
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
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
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
Sysmana 2014 @sergiogomez
crear una cuenta
Sysmana 2014 @sergiogomez
crear un repositorio
Sysmana 2014 @sergiogomez
clonar un repositorio público
$ git clone [email protected]:rails/rails.git
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.
Sysmana 2014 @sergiogomez
búsquedas
Sysmana 2014 @sergiogomez
+ Se puede navegar por todo el código de todos los repositorios públicos
red social de desarrolladores
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
Sysmana 2014 @sergiogomez
issues
Sysmana 2014 @sergiogomez
milestones
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
Sysmana 2014 @sergiogomez
¡¡Muchas gracias!!
a Diego Castillo @dcastillobarnesDavid Muñoz @dperilla
José Ramón Albendín @jralbendin
y por supuestoA TODOS VOSOTROS