SlideShare ist ein Scribd-Unternehmen logo
1 von 113
Downloaden Sie, um offline zu lesen
@fgortazar
@micael_gallego
Una introducción práctica a Git
Who are we?
• Francisco Gortázar
(aka Patxi)
▫ Desarrollador Java
▫ Co-fundador 2ndepisode
▫ Formador
 Java, Spring, Maven, JVM...
▫ Siempre mejorando los
procesos de desarrollo
▫ Actualmente jugando el
rol de devop en 2nd
▫ Profesor e investigador
en @urjc
Who are we?
• Micael Gallego (aka
Mica)
▫ Desarrollador Java
▫ Scrum Máster y
Arquitecto en
Kurento.org
▫ Profesor y formador
▫ Investigador @urjc:
Algoritmos de
optimización
Who are we?
• Sidelab
▫ Laboratorio donde
probamos algunas de
nuestras ideas locas sobre
desarrollo software
▫ scstack
 https://github.com/sidelab-
urjc/scstack
▫ optsicom-framework
 https://github.com/gortazar/
optsicom-framework
▫ optsicom-remote-
experiment-system
 https://github.com/sidelab-
urjc/optsicom-remote-
execution-system
Introducción
• Git es un SCM
distribuido (DSCM)
▫ Cada desarrollador tiene
una copia del repositorio
▫ No hay concepto de
repositorio centralizado
 Ya… pero al final suele
haberlo
Introducción
• Características:
 Snapshots
 Integridad
 Los 4 estados
 Las 3 áreas
 La identidad
Introducción
• Características: Snapshots
 No se guardan diferencias… se guardan snapshots
Introducción
• Características: Integridad
 Los commits se identifican por un hash sha1
 Svn: rev 33
 Git: d025a7b3217f05110ebbf48065b8d02a0ad22ae3
 O más amigablemente: d025a7b
 Los ficheros también se identifican por su sha1
 Si un fichero se corrompe durante la transmisión por
la red se detecta inmediatamente
Introducción
• Características: Los 4 estados
 Los ficheros en git pueden estar en cuatro estados:
 Untracked: el fichero no está bajo “control” de git
 Tracked: el fichero está bajo “control” de git, y puede
estar en uno de los siguientes tres estados:
 Modificado: el fichero ha cambiado desde el último
checkout
 Staged: un fichero modificado ha sido marcado para ser
añadido en el próximo commit
 Committed: el fichero se encuentra en la base de datos
de git
Introducción
Introducción
• Características: Las 3 áreas de un proyecto git
 El directorio git (git directory)
 Contiene los metadatos y la base de datos de git
 Es lo que se copia cuando se clona un repositorio
 Normalmente es una carpeta .git en algún directorio
 La carpeta de trabajo (working directory)
 Es un checkout de una versión específica del proyecto
 Se extrae del directorio git
 Es el espacio donde modificamos los ficheros
 Staging area
 Fichero en el directorio .git que indica qué cambios van en
el próximo commit
Introducción
• Características: La identidad
 Git necesita conocer algunos datos del desarrollador
(aparecen en los commits para identificar al autor)
 Nombre
 Email
 Si no están correctamente configurados… atente a las
consecuencias
 Los commits fallan porque el usuario no está autorizado
 Commits del mismo usuario “físico” no son considerados
como del mismo usuario porque el nombre “lógico”
cambia
Introducción
• Hands on... Instalación de git
 sudo apt-get install git
 Msysgit (http://msysgit.github.com/)
Introducción
• Características: La identidad (y 2)
 ~/.gitconfig:
patxi@patxi-PORTEGE-R830:~$ cat .gitconfig
[user]
name = patxigortazar
email = patxi.gortazar@gmail.com
> git config --global user.name “patxigortazar”
> git config --global user.email “patxi.gortazar@gmail.com”
Follow The Yellow Brick Road:
http://git-scm.com/book/en/Customizing-Git-Git-Configuration
gitrepo> git config user.name “patxigortazar”
gitrepo> git config user.email “patxi.gortazar@gmail.com”
Introducción
• Características: La identidad (y 3)
 Who am I?
patxi@patxi-PORTEGE-R830:~$ git config --list
user.name=patxigortazar
user.email=patxi.gortazar@gmail.com
Introducción
• Clientes git
 En Eclipse
 Egit (viene por defecto en las últimas versiones)
 CLI Linux client
 sudo apt-get install git
 gitg, gitk
 Windows
 Msysgit: http://msysgit.github.com/
 Tortoise Git (requiere msysgit):
http://code.google.com/p/tortoisegit/wiki/Download
 Mac
 SourceTree: http://www.sourcetreeapp.com/
 Gitbox (simple): http://www.gitboxapp.com/
Comenzando
• Crear un repositorio en local
$ mkdir myrepo && cd myrepo
myrepo$ git init
Initialized empty Git repository in
/home/patxi/git/myrepo/.git/
myrepo$ git status
# On branch master
#
# Initial commit
#
nothing to commit (create/copy files and use
"git add" to track)
Comenzando
• Crear un fichero
myrepo$ echo “Hi, git” > README.md
myrepo$ git status
# On branch master
# Initial commit
# Untracked files:
# (use "git add <file>..." to include in
what will be committed)
# README.md
nothing added to commit but untracked files
present (use "git add" to track)
Comenzando
• Añadir el fichero
myrepo$ git add README.md
myrepo$ git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
# (use "git rm --cached <file>..." to
unstage)
#
# new file: README.md
Comenzando
• Estamos listos... commit!
myrepo$ git commit
[master (root-commit) 1dca654] Repo initialization
1 file changed, 1 insertion(+)
create mode 100644 README.md
myrepo$ git status
# On branch master
nothing to commit (working directory clean)
Pongámonos serios
• Crear una cuenta en Github
 http://github.com
Pongámonos serios
• Generación de claves
 Generar claves para acceso a repositorios remotos
 Ubuntu
 ssh-keygen -t rsa
 Copiar el contenido del fichero ~/.ssh/id_rsa.pub en la
configuración de nuestra cuenta de github
 Windows
 Git bash
 ssh-keygen.exe
 Copiar el contenido del fichero c:/documents and
settings/<usuario>/.ssh/id_rsa.pub
Pongámonos serios
• Crear un repositorio en github
 Inicializarlo con un README
• Clonar un repositorio (usar ssh)
myrepo$ git clone git@github.com:gortazar/mygithubrepo.git
Cloning into 'mygithubrepo'...
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
$ cd mygithubrepo
mygithubrepo$
Pongámonos serios
• Clonar el repositorio remoto tiene consecuencias:
 El repositorio local guarda localmente información
sobre el repositorio remoto (llamado por defecto
“origin”)
 Esto permite subir/bajar cambios al/desde repositorio
remoto
 Las ramas refs/heads/* del repositorio remoto se
almacenan en el repositorio local como
refs/remotes/origin/*
 Ver .git/config
Pongámonos serios
• .git/config
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
url = git@github.com:gortazar/mygithubrepo.git
[branch "master"]
remote = origin
merge = refs/heads/master
Pongámonos serios
• Hacer algunos cambios
$ echo "Some change" >> README.md
$ git status
# On branch master
# Changes not staged for commit:
# (use "git add <file>..." to update what will be
committed)
# (use "git checkout -- <file>..." to discard changes
in working directory)
# modified: README.md
no changes added to commit (use "git add" and/or "git
commit -a")
Pongámonos serios
• Y commit
$ git add README
$ git commit -m “Improved doc”
$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
nothing to commit (working directory clean)
Pongámonos serios
• Subir cambios al repositorio remoto
$ git push origin
Counting objects: 5, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 313 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@github.com:gortazar/mygithubrepo.git
f0b5ef1..6c2373a master -> master
Pongámonos serios
• Traer cambios del repositorio remoto
$ git status
# On branch master
nothing to commit (working directory clean)
$ git fetch
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 3 (delta 0)
Unpacking objects: 100% (3/3), done.
From github.com:gortazar/mygithubrepo
6c2373a..ae87f75 master -> origin/master
Pongámonos serios
• Traer cambios del repositorio remoto
$ git status
# On branch master
# Your branch is behind 'origin/master' by 1 commit, and
can be fast-forwarded.
#
nothing to commit (working directory clean)
$ git pull origin
Updating 6c2373a..ae87f75
Fast-forward
another_file.txt | 1 +
1 file changed, 1 insertion(+)
create mode 100644 another_file.txt
Pongámonos serios
• ¿Qué pasa si dos desarrolladores suben
cambios?
$ echo “New file A” > fileA.txt
$ git add fileA.txt
$ git commit -m “New file A added”
$ git push
Pongámonos serios
• ¿Qué pasa si dos desarrolladores suben
cambios?
$ echo “New file B” > fileB.txt
$ git add fileB.txt
$ git commit -m “New file B added”
$ git push
To git@github.com:gortazar/mygithubrepo.git
! [rejected] master -> master (non-fast-forward)
error: failed to push some refs to
'git@github.com:gortazar/mygithubrepo.git'
To prevent you from losing history, non-fast-forward
updates were rejected
Merge the remote changes (e.g. 'git pull') before pushing
again.
Pongámonos serios
• ¿Qué pasa si dos desarrolladores suben
cambios?
$ git pull
remote: Counting objects: 11, done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 8 (delta 2), reused 8 (delta 2)
Unpacking objects: 100% (8/8), done.
From github.com:gortazar/mygithubrepo
bd63f2d..6834389 master -> origin/master
Merge made by the 'recursive' strategy.
fileA.txt | 2 ++
1 file changed, 2 insertions(+)
create mode 100644 fileA.txt
Pongámonos serios
• ¿Qué pasa si dos desarrolladores suben
cambios?
$ git log --oneline
f677bf3 Merge branch 'master' of
github.com:gortazar/mygithubrepo
bd63f2d New file B added
00cb814 File A added
6566348 Fixed appendix
e4f1f88 Apendice
24d5588 Adenda
ae87f75 Master diverged...
6c2373a Improved doc
f0b5ef1 Initial commit
Pongámonos serios
• ¿Qué pasa si dos desarrolladores suben
cambios?
 No olvidemos subir el merge
$ git push
Pongámonos serios
• ¿Qué pasa si hay conflictos?
$ echo “Adenda” >> another_file.txt
$ git add another_file.txt
$ git commit -m “Adenda”
$ git push
Counting objects: 5, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 317 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@github.com:gortazar/mygithubrepo.git
ae87f75..24d5588 master -> master
Pongámonos serios
• ¿Qué pasa si hay conflictos?
$ echo “Apendice” >> another_file.txt
$ git add another_file.txt
$ git commit -m “Apendice”
$ git push
To git@github.com:gortazar/mygithubrepo.git
! [rejected] master -> master (non-fast-forward)
error: failed to push some refs to
'git@github.com:gortazar/mygithubrepo.git'
To prevent you from losing history, non-fast-forward
updates were rejected
See theMerge the remote changes (e.g. 'git pull') before
pushing again.
'Note about fast-forwards' section of 'git push --help'
for details.
Pongámonos serios
• ¿Qué pasa si hay conflictos?
 Usamos git pull para mezclar los cambios
$ git pull
remote: Counting objects: 6, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 3 (delta 0)
Unpacking objects: 100% (3/3), done.
From github.com:gortazar/mygithubrepo
ae87f75..24d5588 master -> origin/master
Auto-merging another_file.txt
CONFLICT (content): Merge conflict in another_file.txt
Automatic merge failed; fix conflicts and then commit the
result.
Pongámonos serios
• ¿Qué pasa si hay conflictos?
 git status nos dice cómo solucionarlo
$ git status
# On branch master
# Your branch and 'origin/master' have diverged,
# and have 1 and 1 different commit each, respectively.
#
# Unmerged paths:
# (use "git add/rm <file>..." as appropriate to mark
resolution)
#
# both modified: another_file.txt
no changes added to commit (use "git add" and/or "git
commit -a")
Pongámonos serios
• ¿Qué pasa si hay conflictos?
 Arreglamos los ficheros con conflictos
A different file
<<<<<<< HEAD
Apendice
=======
adenda
>>>>>>> 24d5588fcc559da7135932a3a364596b6a772364
A different file
Apendice
adenda
Pongámonos serios
• ¿Qué pasa si hay conflictos?
 Con git add indicamos que solucionamos el conflicto
 Commit, push y listo
$ git add another_file.txt
$ git commit -m “Fixed appendix”
$ git push
Counting objects: 10, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (6/6), 646 bytes, done.
Total 6 (delta 0), reused 0 (delta 0)
To git@github.com:gortazar/mygithubrepo.git
24d5588..6566348 master -> master
Ramas y tags
• Creación de ramas
$ git checkout -b cool_feature
Switched to a new branch 'cool_feature'
$ git status
# On branch cool_feature
nothing to commit (working directory clean)
Ramas y tags
• Hacer algún cambio
$ echo "puts 'Hola, mundo'" > hola.rb
$ git add hola.rb
$ git commit -m "Added my first ruby code"
[cool_feature 6a3a19d] Added my first ruby code
1 file changed, 1 insertion(+)
create mode 100644 hola.rb
$ git status
# On branch cool_feature
nothing to commit (working directory clean)
Ramas y tags
• ¿Queremos compartir la rama?
$ git push -u origin cool_feature
Counting objects: 4, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 316 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@github.com:gortazar/mygithubrepo.git
* [new branch] cool_feature -> cool_feature
Ramas y tags
• ¿Queremos compartir la rama?
$ cat .git/config
[core]
...
[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
url = git@github.com:gortazar/mygithubrepo.git
[branch "master"]
remote = origin
merge = refs/heads/master
[branch "cool_feature"]
remote = origin
merge = refs/heads/cool_feature
Ramas y tags
• Obtener una rama remota
$ git checkout cool_feature
Branch cool_feature set up to track remote branch
cool_feature from origin.
Switched to a new branch 'cool_feature’
Ramas y tags
• Crear un tag
 Básicamente es darle nombre a un commit
 Hay dos versiones
 Tags ligeros:sólo contienen el nombre del tag
 Tags pesados: contienen además el nombre del
committer y un mensaje
Ramas y tags
• Crear un tag ligero
$ git tag v1.0
$ git show v1.0
commit 6a3a19dcf6beb4ddcc0c707a6d31fd7b18cdfed5
Author: Francisco Gortazar <patxi.gortazar@gmail.com>
Date: Mon Mar 17 18:03:35 2014 +0000
Added my first ruby code
...
Ramas y tags
• Crear un tag pesado
$ git tag -a v1.0pesado -m "Un tag pesado"
$ git show v1.0pesado
tag v1.0pesado
Tagger: Francisco Gortazar <patxi.gortazar@gmail.com>
Date: Mon Mar 17 18:30:56 2014 +0000
Un tag pesado
commit 6a3a19dcf6beb4ddcc0c707a6d31fd7b18cdfed5
Author: Francisco Gortazar <patxi.gortazar@gmail.com>
Date: Mon Mar 17 18:03:35 2014 +0000
Added my first ruby code
Ramas y tags
• Mostrar la lista de tags
• Empujar los tags al repositorio remoto
$ git tag
v1.0
v1.0pesado
$ git push origin v1.0
Total 0 (delta 0), reused 0 (delta 0)
To git@github.com:gortazar/mygithubrepo.git
* [new tag] v1.0 -> v1.0
Ramas y tags
• Las ramas y los tags son referencias a commits
específicos
• Hay una referencia especial que es HEAD
Ramas y tags
• Cuando hacemos checkout cambiamos el
commit al que apunta HEAD
Comandos útiles
• Comandos útiles
 git help <comando>
 git log
 Información de los commits
 git log -p -2
 Información de lo que ha cambiado en los últimos dos
commits
 git log --graph --all
 git log --oneline
Comandos útiles
• Deshacer acciones
 git commit --amend
 Sustituir el último commit por uno nuevo
 Un amend pueda cambiar:
 El mensaje del commit
 Los ficheros del commit (añadiendo nuevos ficheros al
staging area antes de hacer git commit --amend)
 Para deshacer acciones en el pasado:
 http://sidelab.wordpress.com/2013/10/26/arreglando-
el-historico-en-git/
Comandos útiles
• Git cheatsheet
 http://ndpsoftware.com/git-cheatsheet.html
@fgortazar
@micael_gallego
Git en Eclipse
PATXI GORTÁZAR (@FGORTAZAR)
Git en Eclipse
• Prerequisitos
 STS 3.4.0
 http://www.springsource.org/downloads/sts-ggts
 Escoger la opción basada en Eclipse 4.3
 Incluye Egit y Maven
Git en Eclipse
• Clonar el repositorio
 Eclipse
 PerspectivaGit repository exploring
 Clone a git repository  URI
 git@github.com:gortazar/mygithubrepo.git
Git en Eclipse
• Crear un proyecto Java
 org.filetransfer
 Crear un fichero de versión en la raíz
 Version.txt  0.1
 Crear un fichero SFTPTransfer en el paquete
org.filetransfer
Git en Eclipse
• Compartir el proyecto en git
 Añadirlo al repositorio git del proyecto filetransfer
 Team > Share project… > Git
 Repository: mygithubrepo
Git en Eclipse
• Añadir los ficheros para que Eclipse haga
tracking de los mismos
 Team > Add to index
Git en Eclipse
• Commit!
▫ Sobre el proyecto >Team
> Commit…
▫ El comentario es
obligatorio
▫ Chequear
 Que el autor es el correcto
 Que están marcados los
ficheros adecuados
 Que no está marcada la
casilla “Push the changes to
upstream”
Git en Eclipse
• Añadir algún método más a la clase
 Hay ficheros no añadidos al staging area  no se
hará commit de ellos
Git en Eclipse
• Podemos añadir los
ficheros manualmente
▫ Botón derecho >Team >
Add to index
• En Eclipse esto se hace
automáticamente al
hacer commit
Git en Eclipse
• Subir cambios al repositorio remoto (push)
 En este momento el repositorio local se encuentra
“a 2 commits” del repositorio remoto
Git en Eclipse
• Subir cambios al repositorio remoto (push)
 Sobre el proyecto >Team > Push to upstream
Git en Eclipse
• Crear un branch para la versión
 Sobre el proyecto >Team > Switch to > New branch…
 From: refs/heads/development
 Branch name: release-0.1
 Asegurarse de que checkout new branch está activado
• El código del workspace señala ahora la versión
release-0.1
 Hacer algún cambio
 Commit
Git en Eclipse
• Cambiar en la rama develop la versión a 0.2
 Sobre el proyecto >Team > Switch to > develop
 Modificar el fichero version.txt
 Commit
 Push to upstream
Git en Eclipse
• Hacer un tag
 Tag en la rama release-0.1
 Team > Advanced >Tag > 0.1.0-RC1
 Team > Remote > Push… > Next > Add all tags spec
 Build/test/deploy…
Git en Eclipse
• Obtener cambios del repositorio remoto (pull)
 Sobre el proyecto >Team > Fetch from upstream
 Obtiene el índice de cambios
 Sobre el proyecto >Team > Pull
Git en Eclipse
• ¿Qué pasa si otro desarrollador subió cambios
que entran en conflicto con los míos?
 A modifica el constructor
 B modifica el constructor de otra manera diferente
 A y B hacen push del repositorio
 El último que llega está obligado a hacer un pull y
resolver los conflictos
Git en Eclipse
Git en Eclipse
• ¿Qué pasa si otro desarrollador subió cambios
que entran en conflicto con los míos?
 Obtener los cambios
 Team > Fetch from upstream
 Team > Pull
 Los cambios se mezclan y git marca los conflictos
Git en Eclipse
• ¿Qué pasa si otro desarrollador subió cambios
que entran en conflicto con los míos?
 Corregir (mezclar)
 Añadir la mezcla
 git add
 git commit
 git push
@fgortazar
@micael_gallego
Herramientas de Gestión de
Proyetos (GitHub)
MICAEL GALLEGO
Herramientas de gestión de Proyectos
• Además del repositorio de código, los desarrolladores
necesitan más herramientas para gestionar su
trabajo
• Existen múltiples tipos de herramientas, algunas
focalizadas en un servicio concreto y otras que
integran varios de ellos
• Las puedes instalar tu mismo en un servidor o usar
“Software as a Service”
Herramientas de gestión de Proyectos
• Servicios
 Gestión de proyectos:Tareas,
documentación, comunicación, …
 Aspectos técnicos: Análisis de código,
ejecución de test, entornos de
preproducción, …
http://en.wikipedia.org/wiki/Comparison_of_project_management_software
Herramientas de gestión de Proyectos
• Gestión de tareas
 Sirven para gestionar “las cosas que hay que hacer”
(Issues)
 Tipos:
 Bugs (que arreglar)
 Funcionalidades (que implementar)
 Tareas (instalar un servidor)
 Campos:Título, responsable, estado (nueva, en
progreso, etc…)
Gestión de tareas
Gestión de tareas
Herramientas de gestión de Proyectos
• Documentación compartida
 MediaWiki, Google Drive, Confluence
 Edición colaborativa (todos participan)
 Edición web (en cualquier momento)
 Versionado (para que no haya miedo en meter la
pata)
Forjas
• Las forjas son servicios más o menos
integrados que ayudan en el proceso de
desarrollo
• Cada forja concreta dispone de más o menos
servicios
http://en.wikipedia.org/wiki/Comparison_of_open_source_software_hosting_facilities
Tickets
Wiki
Downloads management
GoogleCode
FORJAS
SourceForge
Redmine
• Project management tool with support for:
 Multiple projects
 Tickets
 Wiki
 Files (downloads)
 Documents
 Forums
 Repository browser
 Calendar
 Gantt charts
 News
 Public/private projects
Redmine
GitHub
• Software as a Service
• Public (free) and private (paid) projects
• Wiki
• Tickets
• Release publication
• Web page
• Git repository
• Social network for developers
Tickets
Wiki
Code
GitHub
GitHub - Issues
• Los issues sirven para gestionar las tareas, o los
errores (que resolver) o las funcionalidades
(que implementar)
• Algunos sistemas permiten crear “tipos” de
issues para categorizarlos
• Vamos a crear un issue
• Nos pondremos como responsables
GitHub - Issues
• Abre el proyecto de un compañero y pon un
comentario en el nuevo issue
• Se le enviará un mail cuando alguien comente
en un issue que tiene asignado
• Pon un comentario en respuesta al comentario
del compañero y cierra el issue
GitHub - Issues
• Se pueden asignar etiquetas a los issues para
categorizalos
• Los “tipos de etiquetas” se crean en la página
principal
• Vamos a crear dos tipos de etiquetas:
 Roja: Para interfaz de usuario
 Negra: Para servicios de backend
• Creamos un issue y le asignamos alguna etiqueta
GitHub - Issues
• Se pueden asignar issues a “milestones”
 Los milestones son puntos en el desarrollo
 Se puede asociar un milestone a cada iteración en la
metodología de desarrollo
• Vamos a crear un milestone
 Nombre: Sprint 1
 Descripción y fecha: Cómo quieras
 Asignar los issues anteriores a este milestone
GitHub -Wiki
• GitHub permite editar wikis desde la web
• Además, los ficheros de código fuente en
formato wiki se visualizan como documentos
en la web
• Si el fichero se llama README.md y está en la
raíz del proyecto, se usa como descripción del
mismo
GitHub -Wiki
GitHub -Wiki
GitHub -Wiki
GitHub -Wiki
GitHub - Eclipse
• Eclipse tiene varios plugins para mejorar la
integración con varias forjas
• GitHub tiene algunos plugins específicos
GitHub - Eclipse
• Mylyn
 Plugin para gestionar
tareas en Eclipse
 Editor de issues
 Interfaz centrado en
tareas
GitHub - Eclipse
• GitHub Mylyn
Connector
 Es necesario instalar
un plugin al plugin
para conectarse a
GitHub
GitHub - Eclipse
• Interfaz
basado en
tareas
 En IDE sabe en
qué tarea estás
trabajando, y
cuando haces
commit, te
pone el enlace
a la tarea (para
que puedas
consultar info)
GitHub - Eclipse
• Eclipse tiene un
plugin para editar
documentos en
formato wiki
• El plugin se llama
“Github flavored
Markdown
viewer”
GitHub - Eclipse
@fgortazar
@micael_gallego
Gracias!!!
PATXI GORTÁZAR
MICAEL GALLEGO

Weitere ähnliche Inhalte

Was ist angesagt?

Mejora tu productividad con git
Mejora tu productividad con gitMejora tu productividad con git
Mejora tu productividad con gitch1l3no
 
PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas
PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balasPHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas
PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balasPablo Godel
 
Introducción a git
Introducción a gitIntroducción a git
Introducción a gitKeopx
 
Git: un enfoque práctico
Git: un enfoque prácticoGit: un enfoque práctico
Git: un enfoque prácticoPatxi Gortázar
 
La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR
La Caja de Herramientas del Desarrollador Moderno PHPConferenceARLa Caja de Herramientas del Desarrollador Moderno PHPConferenceAR
La Caja de Herramientas del Desarrollador Moderno PHPConferenceARPablo Godel
 
Git para-principiantes
Git para-principiantesGit para-principiantes
Git para-principiantesnscoder_mad
 
Gestión de configuración distribuída para la plataforma de Canaima
Gestión de configuración distribuída para la plataforma de Canaima Gestión de configuración distribuída para la plataforma de Canaima
Gestión de configuración distribuída para la plataforma de Canaima Ernesto Crespo
 
Uso practico de git
Uso practico de gitUso practico de git
Uso practico de gitKeopx
 
Herramientas de trabajo para entorno LAMP
Herramientas de trabajo para entorno LAMPHerramientas de trabajo para entorno LAMP
Herramientas de trabajo para entorno LAMPKeopx
 
Cómo instalar un Servidor GIS utilizando el Framework GeoDjango (Django+Post...
Cómo instalar un Servidor GIS utilizando el Framework GeoDjango (Django+Post...Cómo instalar un Servidor GIS utilizando el Framework GeoDjango (Django+Post...
Cómo instalar un Servidor GIS utilizando el Framework GeoDjango (Django+Post...Guillermo Pizarro
 
PPT Git GitHub
PPT Git GitHubPPT Git GitHub
PPT Git GitHubdrsevilla
 
Tu api ha muerto larga vida a tu dsl
Tu api ha muerto  larga vida a tu dslTu api ha muerto  larga vida a tu dsl
Tu api ha muerto larga vida a tu dslJorge Aguilera
 
Control de versiones con GIT
Control de versiones con GITControl de versiones con GIT
Control de versiones con GITJulio Silva
 
Git with Scrum en español
Git with Scrum en españolGit with Scrum en español
Git with Scrum en españolRamón Glez
 

Was ist angesagt? (17)

Mejora tu productividad con git
Mejora tu productividad con gitMejora tu productividad con git
Mejora tu productividad con git
 
PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas
PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balasPHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas
PHP Conference Argentina 2013 - Deployment de aplicaciones PHP a prueba de balas
 
Introducción a git
Introducción a gitIntroducción a git
Introducción a git
 
Git: un enfoque práctico
Git: un enfoque prácticoGit: un enfoque práctico
Git: un enfoque práctico
 
Git: control de versiones
Git: control de versionesGit: control de versiones
Git: control de versiones
 
La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR
La Caja de Herramientas del Desarrollador Moderno PHPConferenceARLa Caja de Herramientas del Desarrollador Moderno PHPConferenceAR
La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR
 
Git para-principiantes
Git para-principiantesGit para-principiantes
Git para-principiantes
 
Control de versiones con Git
Control de versiones con GitControl de versiones con Git
Control de versiones con Git
 
Gestión de configuración distribuída para la plataforma de Canaima
Gestión de configuración distribuída para la plataforma de Canaima Gestión de configuración distribuída para la plataforma de Canaima
Gestión de configuración distribuída para la plataforma de Canaima
 
Seguridad en Android
Seguridad en AndroidSeguridad en Android
Seguridad en Android
 
Uso practico de git
Uso practico de gitUso practico de git
Uso practico de git
 
Herramientas de trabajo para entorno LAMP
Herramientas de trabajo para entorno LAMPHerramientas de trabajo para entorno LAMP
Herramientas de trabajo para entorno LAMP
 
Cómo instalar un Servidor GIS utilizando el Framework GeoDjango (Django+Post...
Cómo instalar un Servidor GIS utilizando el Framework GeoDjango (Django+Post...Cómo instalar un Servidor GIS utilizando el Framework GeoDjango (Django+Post...
Cómo instalar un Servidor GIS utilizando el Framework GeoDjango (Django+Post...
 
PPT Git GitHub
PPT Git GitHubPPT Git GitHub
PPT Git GitHub
 
Tu api ha muerto larga vida a tu dsl
Tu api ha muerto  larga vida a tu dslTu api ha muerto  larga vida a tu dsl
Tu api ha muerto larga vida a tu dsl
 
Control de versiones con GIT
Control de versiones con GITControl de versiones con GIT
Control de versiones con GIT
 
Git with Scrum en español
Git with Scrum en españolGit with Scrum en español
Git with Scrum en español
 

Ähnlich wie Taller Git en la URJC

Git & GitHub Part II
Git & GitHub Part IIGit & GitHub Part II
Git & GitHub Part IIMax Rodriguez
 
Git + Github - Betabeers Córdoba XII
Git + Github - Betabeers Córdoba XIIGit + Github - Betabeers Córdoba XII
Git + Github - Betabeers Córdoba XIIquaip
 
Git + Github - Sysmana 2014
Git + Github - Sysmana 2014Git + Github - Sysmana 2014
Git + Github - Sysmana 2014quaip
 
Taller breve de introduccion a Git
Taller breve de introduccion a GitTaller breve de introduccion a Git
Taller breve de introduccion a GitMario IC
 
GIT presentación de teoría y practica.pdf
GIT presentación de teoría y practica.pdfGIT presentación de teoría y practica.pdf
GIT presentación de teoría y practica.pdfMartinBonuccelli
 
Curso: Publicando mi proyecto web en Github
Curso: Publicando mi proyecto web en GithubCurso: Publicando mi proyecto web en Github
Curso: Publicando mi proyecto web en GithubCarlos Huamaní
 
Scott Chacon - Cuento de tres árboles
Scott Chacon - Cuento de tres árbolesScott Chacon - Cuento de tres árboles
Scott Chacon - Cuento de tres árbolesStarTech Conference
 
El git nuestro de cada dia
El git nuestro de cada diaEl git nuestro de cada dia
El git nuestro de cada diaAlan Descoins
 
GuiaPrincipiantesGitHubrfuenzalidadev.pptx
GuiaPrincipiantesGitHubrfuenzalidadev.pptxGuiaPrincipiantesGitHubrfuenzalidadev.pptx
GuiaPrincipiantesGitHubrfuenzalidadev.pptxfuenzalidarodrigo
 
Presentación GitHub Antonio Luque Bravo y Miguel Ángel Zamora Blanco
Presentación GitHub Antonio Luque Bravo y Miguel Ángel Zamora BlancoPresentación GitHub Antonio Luque Bravo y Miguel Ángel Zamora Blanco
Presentación GitHub Antonio Luque Bravo y Miguel Ángel Zamora BlancoAntonio Luque Bravo
 
Versionando proyectos con Git, desarrollo de software colaborativo
Versionando proyectos con Git, desarrollo de software colaborativoVersionando proyectos con Git, desarrollo de software colaborativo
Versionando proyectos con Git, desarrollo de software colaborativoHernán Aguilera
 

Ähnlich wie Taller Git en la URJC (20)

Git
GitGit
Git
 
Git - Gitlab
Git - GitlabGit - Gitlab
Git - Gitlab
 
Git & GitHub Part II
Git & GitHub Part IIGit & GitHub Part II
Git & GitHub Part II
 
Git + Github - Betabeers Córdoba XII
Git + Github - Betabeers Córdoba XIIGit + Github - Betabeers Córdoba XII
Git + Github - Betabeers Córdoba XII
 
Git + Github - Sysmana 2014
Git + Github - Sysmana 2014Git + Github - Sysmana 2014
Git + Github - Sysmana 2014
 
Git res baz ec - final
Git   res baz ec - finalGit   res baz ec - final
Git res baz ec - final
 
Git 101+
Git 101+Git 101+
Git 101+
 
Taller breve de introduccion a Git
Taller breve de introduccion a GitTaller breve de introduccion a Git
Taller breve de introduccion a Git
 
GIT presentación de teoría y practica.pdf
GIT presentación de teoría y practica.pdfGIT presentación de teoría y practica.pdf
GIT presentación de teoría y practica.pdf
 
Curso: Publicando mi proyecto web en Github
Curso: Publicando mi proyecto web en GithubCurso: Publicando mi proyecto web en Github
Curso: Publicando mi proyecto web en Github
 
Git y github básico
Git y github básicoGit y github básico
Git y github básico
 
Scott Chacon - Cuento de tres árboles
Scott Chacon - Cuento de tres árbolesScott Chacon - Cuento de tres árboles
Scott Chacon - Cuento de tres árboles
 
Tallerintroducciongit
TallerintroducciongitTallerintroducciongit
Tallerintroducciongit
 
El git nuestro de cada dia
El git nuestro de cada diaEl git nuestro de cada dia
El git nuestro de cada dia
 
Git for php devs
Git for php devsGit for php devs
Git for php devs
 
GuiaPrincipiantesGitHubrfuenzalidadev.pptx
GuiaPrincipiantesGitHubrfuenzalidadev.pptxGuiaPrincipiantesGitHubrfuenzalidadev.pptx
GuiaPrincipiantesGitHubrfuenzalidadev.pptx
 
Intro a GIT
Intro a GITIntro a GIT
Intro a GIT
 
The Gift of Git [Español: La Palabra de Git]
The Gift of Git [Español: La Palabra de Git]The Gift of Git [Español: La Palabra de Git]
The Gift of Git [Español: La Palabra de Git]
 
Presentación GitHub Antonio Luque Bravo y Miguel Ángel Zamora Blanco
Presentación GitHub Antonio Luque Bravo y Miguel Ángel Zamora BlancoPresentación GitHub Antonio Luque Bravo y Miguel Ángel Zamora Blanco
Presentación GitHub Antonio Luque Bravo y Miguel Ángel Zamora Blanco
 
Versionando proyectos con Git, desarrollo de software colaborativo
Versionando proyectos con Git, desarrollo de software colaborativoVersionando proyectos con Git, desarrollo de software colaborativo
Versionando proyectos con Git, desarrollo de software colaborativo
 

Kürzlich hochgeladen

LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptchaverriemily794
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx241522327
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA241531640
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxaylincamaho
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx241523733
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxazmysanros90
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMidwarHenryLOZAFLORE
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxGESTECPERUSAC
 
Excel (1) tecnologia.pdf trabajo Excel taller
Excel  (1) tecnologia.pdf trabajo Excel tallerExcel  (1) tecnologia.pdf trabajo Excel taller
Excel (1) tecnologia.pdf trabajo Excel tallerValentinaTabares11
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadMiguelAngelVillanuev48
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.241514949
 
Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxJOSEFERNANDOARENASCA
 
Segunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxSegunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxMariaBurgos55
 
Hernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxHernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxJOSEMANUELHERNANDEZH11
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxAlexander López
 
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxGoogle-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxAlexander López
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son241514984
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxNombre Apellidos
 
Explorando la historia y funcionamiento de la memoria ram
Explorando la historia y funcionamiento de la memoria ramExplorando la historia y funcionamiento de la memoria ram
Explorando la historia y funcionamiento de la memoria ramDIDIERFERNANDOGUERRE
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptMiguelAtencio10
 

Kürzlich hochgeladen (20)

LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptx
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptx
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptx
 
Excel (1) tecnologia.pdf trabajo Excel taller
Excel  (1) tecnologia.pdf trabajo Excel tallerExcel  (1) tecnologia.pdf trabajo Excel taller
Excel (1) tecnologia.pdf trabajo Excel taller
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidad
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.
 
Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptx
 
Segunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxSegunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptx
 
Hernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxHernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptx
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
 
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxGoogle-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
 
Explorando la historia y funcionamiento de la memoria ram
Explorando la historia y funcionamiento de la memoria ramExplorando la historia y funcionamiento de la memoria ram
Explorando la historia y funcionamiento de la memoria ram
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.ppt
 

Taller Git en la URJC

  • 2. Who are we? • Francisco Gortázar (aka Patxi) ▫ Desarrollador Java ▫ Co-fundador 2ndepisode ▫ Formador  Java, Spring, Maven, JVM... ▫ Siempre mejorando los procesos de desarrollo ▫ Actualmente jugando el rol de devop en 2nd ▫ Profesor e investigador en @urjc
  • 3. Who are we? • Micael Gallego (aka Mica) ▫ Desarrollador Java ▫ Scrum Máster y Arquitecto en Kurento.org ▫ Profesor y formador ▫ Investigador @urjc: Algoritmos de optimización
  • 4. Who are we? • Sidelab ▫ Laboratorio donde probamos algunas de nuestras ideas locas sobre desarrollo software ▫ scstack  https://github.com/sidelab- urjc/scstack ▫ optsicom-framework  https://github.com/gortazar/ optsicom-framework ▫ optsicom-remote- experiment-system  https://github.com/sidelab- urjc/optsicom-remote- execution-system
  • 5. Introducción • Git es un SCM distribuido (DSCM) ▫ Cada desarrollador tiene una copia del repositorio ▫ No hay concepto de repositorio centralizado  Ya… pero al final suele haberlo
  • 6. Introducción • Características:  Snapshots  Integridad  Los 4 estados  Las 3 áreas  La identidad
  • 7. Introducción • Características: Snapshots  No se guardan diferencias… se guardan snapshots
  • 8. Introducción • Características: Integridad  Los commits se identifican por un hash sha1  Svn: rev 33  Git: d025a7b3217f05110ebbf48065b8d02a0ad22ae3  O más amigablemente: d025a7b  Los ficheros también se identifican por su sha1  Si un fichero se corrompe durante la transmisión por la red se detecta inmediatamente
  • 9. Introducción • Características: Los 4 estados  Los ficheros en git pueden estar en cuatro estados:  Untracked: el fichero no está bajo “control” de git  Tracked: el fichero está bajo “control” de git, y puede estar en uno de los siguientes tres estados:  Modificado: el fichero ha cambiado desde el último checkout  Staged: un fichero modificado ha sido marcado para ser añadido en el próximo commit  Committed: el fichero se encuentra en la base de datos de git
  • 11. Introducción • Características: Las 3 áreas de un proyecto git  El directorio git (git directory)  Contiene los metadatos y la base de datos de git  Es lo que se copia cuando se clona un repositorio  Normalmente es una carpeta .git en algún directorio  La carpeta de trabajo (working directory)  Es un checkout de una versión específica del proyecto  Se extrae del directorio git  Es el espacio donde modificamos los ficheros  Staging area  Fichero en el directorio .git que indica qué cambios van en el próximo commit
  • 12. Introducción • Características: La identidad  Git necesita conocer algunos datos del desarrollador (aparecen en los commits para identificar al autor)  Nombre  Email  Si no están correctamente configurados… atente a las consecuencias  Los commits fallan porque el usuario no está autorizado  Commits del mismo usuario “físico” no son considerados como del mismo usuario porque el nombre “lógico” cambia
  • 13. Introducción • Hands on... Instalación de git  sudo apt-get install git  Msysgit (http://msysgit.github.com/)
  • 14. Introducción • Características: La identidad (y 2)  ~/.gitconfig: patxi@patxi-PORTEGE-R830:~$ cat .gitconfig [user] name = patxigortazar email = patxi.gortazar@gmail.com > git config --global user.name “patxigortazar” > git config --global user.email “patxi.gortazar@gmail.com” Follow The Yellow Brick Road: http://git-scm.com/book/en/Customizing-Git-Git-Configuration gitrepo> git config user.name “patxigortazar” gitrepo> git config user.email “patxi.gortazar@gmail.com”
  • 15. Introducción • Características: La identidad (y 3)  Who am I? patxi@patxi-PORTEGE-R830:~$ git config --list user.name=patxigortazar user.email=patxi.gortazar@gmail.com
  • 16. Introducción • Clientes git  En Eclipse  Egit (viene por defecto en las últimas versiones)  CLI Linux client  sudo apt-get install git  gitg, gitk  Windows  Msysgit: http://msysgit.github.com/  Tortoise Git (requiere msysgit): http://code.google.com/p/tortoisegit/wiki/Download  Mac  SourceTree: http://www.sourcetreeapp.com/  Gitbox (simple): http://www.gitboxapp.com/
  • 17. Comenzando • Crear un repositorio en local $ mkdir myrepo && cd myrepo myrepo$ git init Initialized empty Git repository in /home/patxi/git/myrepo/.git/ myrepo$ git status # On branch master # # Initial commit # nothing to commit (create/copy files and use "git add" to track)
  • 18. Comenzando • Crear un fichero myrepo$ echo “Hi, git” > README.md myrepo$ git status # On branch master # Initial commit # Untracked files: # (use "git add <file>..." to include in what will be committed) # README.md nothing added to commit but untracked files present (use "git add" to track)
  • 19. Comenzando • Añadir el fichero myrepo$ git add README.md myrepo$ git status # On branch master # # Initial commit # # Changes to be committed: # (use "git rm --cached <file>..." to unstage) # # new file: README.md
  • 20. Comenzando • Estamos listos... commit! myrepo$ git commit [master (root-commit) 1dca654] Repo initialization 1 file changed, 1 insertion(+) create mode 100644 README.md myrepo$ git status # On branch master nothing to commit (working directory clean)
  • 21. Pongámonos serios • Crear una cuenta en Github  http://github.com
  • 22. Pongámonos serios • Generación de claves  Generar claves para acceso a repositorios remotos  Ubuntu  ssh-keygen -t rsa  Copiar el contenido del fichero ~/.ssh/id_rsa.pub en la configuración de nuestra cuenta de github  Windows  Git bash  ssh-keygen.exe  Copiar el contenido del fichero c:/documents and settings/<usuario>/.ssh/id_rsa.pub
  • 23. Pongámonos serios • Crear un repositorio en github  Inicializarlo con un README • Clonar un repositorio (usar ssh) myrepo$ git clone git@github.com:gortazar/mygithubrepo.git Cloning into 'mygithubrepo'... remote: Counting objects: 3, done. remote: Compressing objects: 100% (2/2), done. remote: Total 3 (delta 0), reused 0 (delta 0) Unpacking objects: 100% (3/3), done. $ cd mygithubrepo mygithubrepo$
  • 24. Pongámonos serios • Clonar el repositorio remoto tiene consecuencias:  El repositorio local guarda localmente información sobre el repositorio remoto (llamado por defecto “origin”)  Esto permite subir/bajar cambios al/desde repositorio remoto  Las ramas refs/heads/* del repositorio remoto se almacenan en el repositorio local como refs/remotes/origin/*  Ver .git/config
  • 25. Pongámonos serios • .git/config [core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true [remote "origin"] fetch = +refs/heads/*:refs/remotes/origin/* url = git@github.com:gortazar/mygithubrepo.git [branch "master"] remote = origin merge = refs/heads/master
  • 26. Pongámonos serios • Hacer algunos cambios $ echo "Some change" >> README.md $ git status # On branch master # Changes not staged for commit: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # modified: README.md no changes added to commit (use "git add" and/or "git commit -a")
  • 27. Pongámonos serios • Y commit $ git add README $ git commit -m “Improved doc” $ git status # On branch master # Your branch is ahead of 'origin/master' by 1 commit. # nothing to commit (working directory clean)
  • 28. Pongámonos serios • Subir cambios al repositorio remoto $ git push origin Counting objects: 5, done. Delta compression using up to 2 threads. Compressing objects: 100% (2/2), done. Writing objects: 100% (3/3), 313 bytes, done. Total 3 (delta 0), reused 0 (delta 0) To git@github.com:gortazar/mygithubrepo.git f0b5ef1..6c2373a master -> master
  • 29. Pongámonos serios • Traer cambios del repositorio remoto $ git status # On branch master nothing to commit (working directory clean) $ git fetch remote: Counting objects: 5, done. remote: Compressing objects: 100% (2/2), done. remote: Total 3 (delta 0), reused 3 (delta 0) Unpacking objects: 100% (3/3), done. From github.com:gortazar/mygithubrepo 6c2373a..ae87f75 master -> origin/master
  • 30. Pongámonos serios • Traer cambios del repositorio remoto $ git status # On branch master # Your branch is behind 'origin/master' by 1 commit, and can be fast-forwarded. # nothing to commit (working directory clean) $ git pull origin Updating 6c2373a..ae87f75 Fast-forward another_file.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 another_file.txt
  • 31. Pongámonos serios • ¿Qué pasa si dos desarrolladores suben cambios? $ echo “New file A” > fileA.txt $ git add fileA.txt $ git commit -m “New file A added” $ git push
  • 32. Pongámonos serios • ¿Qué pasa si dos desarrolladores suben cambios? $ echo “New file B” > fileB.txt $ git add fileB.txt $ git commit -m “New file B added” $ git push To git@github.com:gortazar/mygithubrepo.git ! [rejected] master -> master (non-fast-forward) error: failed to push some refs to 'git@github.com:gortazar/mygithubrepo.git' To prevent you from losing history, non-fast-forward updates were rejected Merge the remote changes (e.g. 'git pull') before pushing again.
  • 33. Pongámonos serios • ¿Qué pasa si dos desarrolladores suben cambios? $ git pull remote: Counting objects: 11, done. remote: Compressing objects: 100% (4/4), done. remote: Total 8 (delta 2), reused 8 (delta 2) Unpacking objects: 100% (8/8), done. From github.com:gortazar/mygithubrepo bd63f2d..6834389 master -> origin/master Merge made by the 'recursive' strategy. fileA.txt | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 fileA.txt
  • 34. Pongámonos serios • ¿Qué pasa si dos desarrolladores suben cambios? $ git log --oneline f677bf3 Merge branch 'master' of github.com:gortazar/mygithubrepo bd63f2d New file B added 00cb814 File A added 6566348 Fixed appendix e4f1f88 Apendice 24d5588 Adenda ae87f75 Master diverged... 6c2373a Improved doc f0b5ef1 Initial commit
  • 35. Pongámonos serios • ¿Qué pasa si dos desarrolladores suben cambios?  No olvidemos subir el merge $ git push
  • 36. Pongámonos serios • ¿Qué pasa si hay conflictos? $ echo “Adenda” >> another_file.txt $ git add another_file.txt $ git commit -m “Adenda” $ git push Counting objects: 5, done. Delta compression using up to 2 threads. Compressing objects: 100% (2/2), done. Writing objects: 100% (3/3), 317 bytes, done. Total 3 (delta 0), reused 0 (delta 0) To git@github.com:gortazar/mygithubrepo.git ae87f75..24d5588 master -> master
  • 37. Pongámonos serios • ¿Qué pasa si hay conflictos? $ echo “Apendice” >> another_file.txt $ git add another_file.txt $ git commit -m “Apendice” $ git push To git@github.com:gortazar/mygithubrepo.git ! [rejected] master -> master (non-fast-forward) error: failed to push some refs to 'git@github.com:gortazar/mygithubrepo.git' To prevent you from losing history, non-fast-forward updates were rejected See theMerge the remote changes (e.g. 'git pull') before pushing again. 'Note about fast-forwards' section of 'git push --help' for details.
  • 38. Pongámonos serios • ¿Qué pasa si hay conflictos?  Usamos git pull para mezclar los cambios $ git pull remote: Counting objects: 6, done. remote: Compressing objects: 100% (2/2), done. remote: Total 3 (delta 0), reused 3 (delta 0) Unpacking objects: 100% (3/3), done. From github.com:gortazar/mygithubrepo ae87f75..24d5588 master -> origin/master Auto-merging another_file.txt CONFLICT (content): Merge conflict in another_file.txt Automatic merge failed; fix conflicts and then commit the result.
  • 39. Pongámonos serios • ¿Qué pasa si hay conflictos?  git status nos dice cómo solucionarlo $ git status # On branch master # Your branch and 'origin/master' have diverged, # and have 1 and 1 different commit each, respectively. # # Unmerged paths: # (use "git add/rm <file>..." as appropriate to mark resolution) # # both modified: another_file.txt no changes added to commit (use "git add" and/or "git commit -a")
  • 40. Pongámonos serios • ¿Qué pasa si hay conflictos?  Arreglamos los ficheros con conflictos A different file <<<<<<< HEAD Apendice ======= adenda >>>>>>> 24d5588fcc559da7135932a3a364596b6a772364 A different file Apendice adenda
  • 41. Pongámonos serios • ¿Qué pasa si hay conflictos?  Con git add indicamos que solucionamos el conflicto  Commit, push y listo $ git add another_file.txt $ git commit -m “Fixed appendix” $ git push Counting objects: 10, done. Delta compression using up to 2 threads. Compressing objects: 100% (4/4), done. Writing objects: 100% (6/6), 646 bytes, done. Total 6 (delta 0), reused 0 (delta 0) To git@github.com:gortazar/mygithubrepo.git 24d5588..6566348 master -> master
  • 42. Ramas y tags • Creación de ramas $ git checkout -b cool_feature Switched to a new branch 'cool_feature' $ git status # On branch cool_feature nothing to commit (working directory clean)
  • 43. Ramas y tags • Hacer algún cambio $ echo "puts 'Hola, mundo'" > hola.rb $ git add hola.rb $ git commit -m "Added my first ruby code" [cool_feature 6a3a19d] Added my first ruby code 1 file changed, 1 insertion(+) create mode 100644 hola.rb $ git status # On branch cool_feature nothing to commit (working directory clean)
  • 44. Ramas y tags • ¿Queremos compartir la rama? $ git push -u origin cool_feature Counting objects: 4, done. Delta compression using up to 2 threads. Compressing objects: 100% (2/2), done. Writing objects: 100% (3/3), 316 bytes, done. Total 3 (delta 0), reused 0 (delta 0) To git@github.com:gortazar/mygithubrepo.git * [new branch] cool_feature -> cool_feature
  • 45. Ramas y tags • ¿Queremos compartir la rama? $ cat .git/config [core] ... [remote "origin"] fetch = +refs/heads/*:refs/remotes/origin/* url = git@github.com:gortazar/mygithubrepo.git [branch "master"] remote = origin merge = refs/heads/master [branch "cool_feature"] remote = origin merge = refs/heads/cool_feature
  • 46. Ramas y tags • Obtener una rama remota $ git checkout cool_feature Branch cool_feature set up to track remote branch cool_feature from origin. Switched to a new branch 'cool_feature’
  • 47. Ramas y tags • Crear un tag  Básicamente es darle nombre a un commit  Hay dos versiones  Tags ligeros:sólo contienen el nombre del tag  Tags pesados: contienen además el nombre del committer y un mensaje
  • 48. Ramas y tags • Crear un tag ligero $ git tag v1.0 $ git show v1.0 commit 6a3a19dcf6beb4ddcc0c707a6d31fd7b18cdfed5 Author: Francisco Gortazar <patxi.gortazar@gmail.com> Date: Mon Mar 17 18:03:35 2014 +0000 Added my first ruby code ...
  • 49. Ramas y tags • Crear un tag pesado $ git tag -a v1.0pesado -m "Un tag pesado" $ git show v1.0pesado tag v1.0pesado Tagger: Francisco Gortazar <patxi.gortazar@gmail.com> Date: Mon Mar 17 18:30:56 2014 +0000 Un tag pesado commit 6a3a19dcf6beb4ddcc0c707a6d31fd7b18cdfed5 Author: Francisco Gortazar <patxi.gortazar@gmail.com> Date: Mon Mar 17 18:03:35 2014 +0000 Added my first ruby code
  • 50. Ramas y tags • Mostrar la lista de tags • Empujar los tags al repositorio remoto $ git tag v1.0 v1.0pesado $ git push origin v1.0 Total 0 (delta 0), reused 0 (delta 0) To git@github.com:gortazar/mygithubrepo.git * [new tag] v1.0 -> v1.0
  • 51. Ramas y tags • Las ramas y los tags son referencias a commits específicos • Hay una referencia especial que es HEAD
  • 52. Ramas y tags • Cuando hacemos checkout cambiamos el commit al que apunta HEAD
  • 53. Comandos útiles • Comandos útiles  git help <comando>  git log  Información de los commits  git log -p -2  Información de lo que ha cambiado en los últimos dos commits  git log --graph --all  git log --oneline
  • 54. Comandos útiles • Deshacer acciones  git commit --amend  Sustituir el último commit por uno nuevo  Un amend pueda cambiar:  El mensaje del commit  Los ficheros del commit (añadiendo nuevos ficheros al staging area antes de hacer git commit --amend)  Para deshacer acciones en el pasado:  http://sidelab.wordpress.com/2013/10/26/arreglando- el-historico-en-git/
  • 55. Comandos útiles • Git cheatsheet  http://ndpsoftware.com/git-cheatsheet.html
  • 57. Git en Eclipse • Prerequisitos  STS 3.4.0  http://www.springsource.org/downloads/sts-ggts  Escoger la opción basada en Eclipse 4.3  Incluye Egit y Maven
  • 58. Git en Eclipse • Clonar el repositorio  Eclipse  PerspectivaGit repository exploring  Clone a git repository  URI  git@github.com:gortazar/mygithubrepo.git
  • 59. Git en Eclipse • Crear un proyecto Java  org.filetransfer  Crear un fichero de versión en la raíz  Version.txt  0.1  Crear un fichero SFTPTransfer en el paquete org.filetransfer
  • 60. Git en Eclipse • Compartir el proyecto en git  Añadirlo al repositorio git del proyecto filetransfer  Team > Share project… > Git  Repository: mygithubrepo
  • 61. Git en Eclipse • Añadir los ficheros para que Eclipse haga tracking de los mismos  Team > Add to index
  • 62. Git en Eclipse • Commit! ▫ Sobre el proyecto >Team > Commit… ▫ El comentario es obligatorio ▫ Chequear  Que el autor es el correcto  Que están marcados los ficheros adecuados  Que no está marcada la casilla “Push the changes to upstream”
  • 63. Git en Eclipse • Añadir algún método más a la clase  Hay ficheros no añadidos al staging area  no se hará commit de ellos
  • 64. Git en Eclipse • Podemos añadir los ficheros manualmente ▫ Botón derecho >Team > Add to index • En Eclipse esto se hace automáticamente al hacer commit
  • 65. Git en Eclipse • Subir cambios al repositorio remoto (push)  En este momento el repositorio local se encuentra “a 2 commits” del repositorio remoto
  • 66. Git en Eclipse • Subir cambios al repositorio remoto (push)  Sobre el proyecto >Team > Push to upstream
  • 67. Git en Eclipse • Crear un branch para la versión  Sobre el proyecto >Team > Switch to > New branch…  From: refs/heads/development  Branch name: release-0.1  Asegurarse de que checkout new branch está activado • El código del workspace señala ahora la versión release-0.1  Hacer algún cambio  Commit
  • 68. Git en Eclipse • Cambiar en la rama develop la versión a 0.2  Sobre el proyecto >Team > Switch to > develop  Modificar el fichero version.txt  Commit  Push to upstream
  • 69. Git en Eclipse • Hacer un tag  Tag en la rama release-0.1  Team > Advanced >Tag > 0.1.0-RC1  Team > Remote > Push… > Next > Add all tags spec  Build/test/deploy…
  • 70. Git en Eclipse • Obtener cambios del repositorio remoto (pull)  Sobre el proyecto >Team > Fetch from upstream  Obtiene el índice de cambios  Sobre el proyecto >Team > Pull
  • 71. Git en Eclipse • ¿Qué pasa si otro desarrollador subió cambios que entran en conflicto con los míos?  A modifica el constructor  B modifica el constructor de otra manera diferente  A y B hacen push del repositorio  El último que llega está obligado a hacer un pull y resolver los conflictos
  • 73. Git en Eclipse • ¿Qué pasa si otro desarrollador subió cambios que entran en conflicto con los míos?  Obtener los cambios  Team > Fetch from upstream  Team > Pull  Los cambios se mezclan y git marca los conflictos
  • 74. Git en Eclipse • ¿Qué pasa si otro desarrollador subió cambios que entran en conflicto con los míos?  Corregir (mezclar)  Añadir la mezcla  git add  git commit  git push
  • 75. @fgortazar @micael_gallego Herramientas de Gestión de Proyetos (GitHub) MICAEL GALLEGO
  • 76. Herramientas de gestión de Proyectos • Además del repositorio de código, los desarrolladores necesitan más herramientas para gestionar su trabajo • Existen múltiples tipos de herramientas, algunas focalizadas en un servicio concreto y otras que integran varios de ellos • Las puedes instalar tu mismo en un servidor o usar “Software as a Service”
  • 77. Herramientas de gestión de Proyectos • Servicios  Gestión de proyectos:Tareas, documentación, comunicación, …  Aspectos técnicos: Análisis de código, ejecución de test, entornos de preproducción, … http://en.wikipedia.org/wiki/Comparison_of_project_management_software
  • 78. Herramientas de gestión de Proyectos • Gestión de tareas  Sirven para gestionar “las cosas que hay que hacer” (Issues)  Tipos:  Bugs (que arreglar)  Funcionalidades (que implementar)  Tareas (instalar un servidor)  Campos:Título, responsable, estado (nueva, en progreso, etc…)
  • 81. Herramientas de gestión de Proyectos • Documentación compartida  MediaWiki, Google Drive, Confluence  Edición colaborativa (todos participan)  Edición web (en cualquier momento)  Versionado (para que no haya miedo en meter la pata)
  • 82. Forjas • Las forjas son servicios más o menos integrados que ayudan en el proceso de desarrollo • Cada forja concreta dispone de más o menos servicios http://en.wikipedia.org/wiki/Comparison_of_open_source_software_hosting_facilities
  • 85. Redmine • Project management tool with support for:  Multiple projects  Tickets  Wiki  Files (downloads)  Documents  Forums  Repository browser  Calendar  Gantt charts  News  Public/private projects
  • 87. GitHub • Software as a Service • Public (free) and private (paid) projects • Wiki • Tickets • Release publication • Web page • Git repository • Social network for developers
  • 89. GitHub - Issues • Los issues sirven para gestionar las tareas, o los errores (que resolver) o las funcionalidades (que implementar) • Algunos sistemas permiten crear “tipos” de issues para categorizarlos • Vamos a crear un issue • Nos pondremos como responsables
  • 90.
  • 91.
  • 92.
  • 93. GitHub - Issues • Abre el proyecto de un compañero y pon un comentario en el nuevo issue • Se le enviará un mail cuando alguien comente en un issue que tiene asignado • Pon un comentario en respuesta al comentario del compañero y cierra el issue
  • 94.
  • 95. GitHub - Issues • Se pueden asignar etiquetas a los issues para categorizalos • Los “tipos de etiquetas” se crean en la página principal • Vamos a crear dos tipos de etiquetas:  Roja: Para interfaz de usuario  Negra: Para servicios de backend • Creamos un issue y le asignamos alguna etiqueta
  • 96.
  • 97. GitHub - Issues • Se pueden asignar issues a “milestones”  Los milestones son puntos en el desarrollo  Se puede asociar un milestone a cada iteración en la metodología de desarrollo • Vamos a crear un milestone  Nombre: Sprint 1  Descripción y fecha: Cómo quieras  Asignar los issues anteriores a este milestone
  • 98.
  • 99.
  • 100.
  • 101. GitHub -Wiki • GitHub permite editar wikis desde la web • Además, los ficheros de código fuente en formato wiki se visualizan como documentos en la web • Si el fichero se llama README.md y está en la raíz del proyecto, se usa como descripción del mismo
  • 106. GitHub - Eclipse • Eclipse tiene varios plugins para mejorar la integración con varias forjas • GitHub tiene algunos plugins específicos
  • 107. GitHub - Eclipse • Mylyn  Plugin para gestionar tareas en Eclipse  Editor de issues  Interfaz centrado en tareas
  • 108. GitHub - Eclipse • GitHub Mylyn Connector  Es necesario instalar un plugin al plugin para conectarse a GitHub
  • 109.
  • 110. GitHub - Eclipse • Interfaz basado en tareas  En IDE sabe en qué tarea estás trabajando, y cuando haces commit, te pone el enlace a la tarea (para que puedas consultar info)
  • 111. GitHub - Eclipse • Eclipse tiene un plugin para editar documentos en formato wiki • El plugin se llama “Github flavored Markdown viewer”