Your SlideShare is downloading. ×
0
@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, Mave...
Who are we?
• Micael Gallego (aka
Mica)
▫ Desarrollador Java
▫ Scrum Máster y
Arquitecto en
Kurento.org
▫ Profesor y forma...
Who are we?
• Sidelab
▫ Laboratorio donde
probamos algunas de
nuestras ideas locas sobre
desarrollo software
▫ scstack
 h...
Introducción
• Git es un SCM
distribuido (DSCM)
▫ Cada desarrollador tiene
una copia del repositorio
▫ No hay concepto de
...
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: d025a7b3217f...
Introducción
• Características: Los 4 estados
 Los ficheros en git pueden estar en cuatro estados:
 Untracked: el ficher...
Introducción
Introducción
• Características: Las 3 áreas de un proyecto git
 El directorio git (git directory)
 Contiene los metadato...
Introducción
• Características: La identidad
 Git necesita conocer algunos datos del desarrollador
(aparecen en los commi...
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 ...
Introducción
• Características: La identidad (y 3)
 Who am I?
patxi@patxi-PORTEGE-R830:~$ git config --list
user.name=pat...
Introducción
• Clientes git
 En Eclipse
 Egit (viene por defecto en las últimas versiones)
 CLI Linux client
 sudo apt...
Comenzando
• Crear un repositorio en local
$ mkdir myrepo && cd myrepo
myrepo$ git init
Initialized empty Git repository i...
Comenzando
• Crear un fichero
myrepo$ echo “Hi, git” > README.md
myrepo$ git status
# On branch master
# Initial commit
# ...
Comenzando
• Añadir el fichero
myrepo$ git add README.md
myrepo$ git status
# On branch master
#
# Initial commit
#
# Chan...
Comenzando
• Estamos listos... commit!
myrepo$ git commit
[master (root-commit) 1dca654] Repo initialization
1 file change...
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
...
Pongámonos serios
• Crear un repositorio en github
 Inicializarlo con un README
• Clonar un repositorio (usar ssh)
myrepo...
Pongámonos serios
• Clonar el repositorio remoto tiene consecuencias:
 El repositorio local guarda localmente información...
Pongámonos serios
• .git/config
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[r...
Pongámonos serios
• Hacer algunos cambios
$ echo "Some change" >> README.md
$ git status
# On branch master
# Changes not ...
Pongámonos serios
• Y commit
$ git add README
$ git commit -m “Improved doc”
$ git status
# On branch master
# Your branch...
Pongámonos serios
• Subir cambios al repositorio remoto
$ git push origin
Counting objects: 5, done.
Delta compression usi...
Pongámonos serios
• Traer cambios del repositorio remoto
$ git status
# On branch master
nothing to commit (working direct...
Pongámonos serios
• Traer cambios del repositorio remoto
$ git status
# On branch master
# Your branch is behind 'origin/m...
Pongámonos serios
• ¿Qué pasa si dos desarrolladores suben
cambios?
$ echo “New file A” > fileA.txt
$ git add fileA.txt
$ ...
Pongámonos serios
• ¿Qué pasa si dos desarrolladores suben
cambios?
$ echo “New file B” > fileB.txt
$ git add fileB.txt
$ ...
Pongámonos serios
• ¿Qué pasa si dos desarrolladores suben
cambios?
$ git pull
remote: Counting objects: 11, done.
remote:...
Pongámonos serios
• ¿Qué pasa si dos desarrolladores suben
cambios?
$ git log --oneline
f677bf3 Merge branch 'master' of
g...
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 comm...
Pongámonos serios
• ¿Qué pasa si hay conflictos?
$ echo “Apendice” >> another_file.txt
$ git add another_file.txt
$ git co...
Pongámonos serios
• ¿Qué pasa si hay conflictos?
 Usamos git pull para mezclar los cambios
$ git pull
remote: Counting ob...
Pongámonos serios
• ¿Qué pasa si hay conflictos?
 git status nos dice cómo solucionarlo
$ git status
# On branch master
#...
Pongámonos serios
• ¿Qué pasa si hay conflictos?
 Arreglamos los ficheros con conflictos
A different file
<<<<<<< HEAD
Ap...
Pongámonos serios
• ¿Qué pasa si hay conflictos?
 Con git add indicamos que solucionamos el conflicto
 Commit, push y li...
Ramas y tags
• Creación de ramas
$ git checkout -b cool_feature
Switched to a new branch 'cool_feature'
$ git status
# On ...
Ramas y tags
• Hacer algún cambio
$ echo "puts 'Hola, mundo'" > hola.rb
$ git add hola.rb
$ git commit -m "Added my first ...
Ramas y tags
• ¿Queremos compartir la rama?
$ git push -u origin cool_feature
Counting objects: 4, done.
Delta compression...
Ramas y tags
• ¿Queremos compartir la rama?
$ cat .git/config
[core]
...
[remote "origin"]
fetch = +refs/heads/*:refs/remo...
Ramas y tags
• Obtener una rama remota
$ git checkout cool_feature
Branch cool_feature set up to track remote branch
cool_...
Ramas y tags
• Crear un tag
 Básicamente es darle nombre a un commit
 Hay dos versiones
 Tags ligeros:sólo contienen el...
Ramas y tags
• Crear un tag ligero
$ git tag v1.0
$ git show v1.0
commit 6a3a19dcf6beb4ddcc0c707a6d31fd7b18cdfed5
Author: ...
Ramas y tags
• Crear un tag pesado
$ git tag -a v1.0pesado -m "Un tag pesado"
$ git show v1.0pesado
tag v1.0pesado
Tagger:...
Ramas y tags
• Mostrar la lista de tags
• Empujar los tags al repositorio remoto
$ git tag
v1.0
v1.0pesado
$ git push orig...
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ó...
Comandos útiles
• Deshacer acciones
 git commit --amend
 Sustituir el último commit por uno nuevo
 Un amend pueda cambi...
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 ...
Git en Eclipse
• Clonar el repositorio
 Eclipse
 PerspectivaGit repository exploring
 Clone a git repository  URI
 gi...
Git en Eclipse
• Crear un proyecto Java
 org.filetransfer
 Crear un fichero de versión en la raíz
 Version.txt  0.1
 ...
Git en Eclipse
• Compartir el proyecto en git
 Añadirlo al repositorio git del proyecto filetransfer
 Team > Share proje...
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 e...
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
au...
Git en Eclipse
• Subir cambios al repositorio remoto (push)
 En este momento el repositorio local se encuentra
“a 2 commi...
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/de...
Git en Eclipse
• Cambiar en la rama develop la versión a 0.2
 Sobre el proyecto >Team > Switch to > develop
 Modificar e...
Git en Eclipse
• Hacer un tag
 Tag en la rama release-0.1
 Team > Advanced >Tag > 0.1.0-RC1
 Team > Remote > Push… > Ne...
Git en Eclipse
• Obtener cambios del repositorio remoto (pull)
 Sobre el proyecto >Team > Fetch from upstream
 Obtiene e...
Git en Eclipse
• ¿Qué pasa si otro desarrollador subió cambios
que entran en conflicto con los míos?
 A modifica el const...
Git en Eclipse
Git en Eclipse
• ¿Qué pasa si otro desarrollador subió cambios
que entran en conflicto con los míos?
 Obtener los cambios...
Git en Eclipse
• ¿Qué pasa si otro desarrollador subió cambios
que entran en conflicto con los míos?
 Corregir (mezclar)
...
@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 pa...
Herramientas de gestión de Proyectos
• Servicios
 Gestión de proyectos:Tareas,
documentación, comunicación, …
 Aspectos ...
Herramientas de gestión de Proyectos
• Gestión de tareas
 Sirven para gestionar “las cosas que hay que hacer”
(Issues)
 ...
Gestión de tareas
Gestión de tareas
Herramientas de gestión de Proyectos
• Documentación compartida
 MediaWiki, Google Drive, Confluence
 Edición colaborati...
Forjas
• Las forjas son servicios más o menos
integrados que ayudan en el proceso de
desarrollo
• Cada forja concreta disp...
Tickets
Wiki
Downloads management
GoogleCode
FORJAS
SourceForge
Redmine
• Project management tool with support for:
 Multiple projects
 Tickets
 Wiki
 Files (downloads)
 Documents
...
Redmine
GitHub
• Software as a Service
• Public (free) and private (paid) projects
• Wiki
• Tickets
• Release publication
• Web pa...
Tickets
Wiki
Code
GitHub
GitHub - Issues
• Los issues sirven para gestionar las tareas, o los
errores (que resolver) o las funcionalidades
(que imp...
GitHub - Issues
• Abre el proyecto de un compañero y pon un
comentario en el nuevo issue
• Se le enviará un mail cuando al...
GitHub - Issues
• Se pueden asignar etiquetas a los issues para
categorizalos
• Los “tipos de etiquetas” se crean en la pá...
GitHub - Issues
• Se pueden asignar issues a “milestones”
 Los milestones son puntos en el desarrollo
 Se puede asociar ...
GitHub -Wiki
• GitHub permite editar wikis desde la web
• Además, los ficheros de código fuente en
formato wiki se visuali...
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 plugi...
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 e...
GitHub - Eclipse
• Eclipse tiene un
plugin para editar
documentos en
formato wiki
• El plugin se llama
“Github flavored
Ma...
GitHub - Eclipse
@fgortazar
@micael_gallego
Gracias!!!
PATXI GORTÁZAR
MICAEL GALLEGO
Taller Git en la URJC
Taller Git en la URJC
Taller Git en la URJC
Taller Git en la URJC
Taller Git en la URJC
Taller Git en la URJC
Taller Git en la URJC
Taller Git en la URJC
Taller Git en la URJC
Upcoming SlideShare
Loading in...5
×

Taller Git en la URJC

739

Published on

Taller Git que impartimos Francisco Gortázar (@fgortazar) y Micael Gallego (@micael_gallego) en la Escuela Técnica Superior de Ingeniería Informática de la URJC.

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
739
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
20
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Transcript of "Taller Git en la URJC "

  1. 1. @fgortazar @micael_gallego Una introducción práctica a Git
  2. 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. 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. 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. 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. 6. Introducción • Características:  Snapshots  Integridad  Los 4 estados  Las 3 áreas  La identidad
  7. 7. Introducción • Características: Snapshots  No se guardan diferencias… se guardan snapshots
  8. 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. 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
  10. 10. Introducción
  11. 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. 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. 13. Introducción • Hands on... Instalación de git  sudo apt-get install git  Msysgit (http://msysgit.github.com/)
  14. 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. 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. 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. 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. 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. 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. 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. 21. Pongámonos serios • Crear una cuenta en Github  http://github.com
  22. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 35. Pongámonos serios • ¿Qué pasa si dos desarrolladores suben cambios?  No olvidemos subir el merge $ git push
  36. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 51. Ramas y tags • Las ramas y los tags son referencias a commits específicos • Hay una referencia especial que es HEAD
  52. 52. Ramas y tags • Cuando hacemos checkout cambiamos el commit al que apunta HEAD
  53. 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. 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. 55. Comandos útiles • Git cheatsheet  http://ndpsoftware.com/git-cheatsheet.html
  56. 56. @fgortazar @micael_gallego Git en Eclipse PATXI GORTÁZAR (@FGORTAZAR)
  57. 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. 58. Git en Eclipse • Clonar el repositorio  Eclipse  PerspectivaGit repository exploring  Clone a git repository  URI  git@github.com:gortazar/mygithubrepo.git
  59. 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. 60. Git en Eclipse • Compartir el proyecto en git  Añadirlo al repositorio git del proyecto filetransfer  Team > Share project… > Git  Repository: mygithubrepo
  61. 61. Git en Eclipse • Añadir los ficheros para que Eclipse haga tracking de los mismos  Team > Add to index
  62. 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. 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. 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. 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. 66. Git en Eclipse • Subir cambios al repositorio remoto (push)  Sobre el proyecto >Team > Push to upstream
  67. 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. 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. 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. 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. 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
  72. 72. Git en Eclipse
  73. 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. 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. 75. @fgortazar @micael_gallego Herramientas de Gestión de Proyetos (GitHub) MICAEL GALLEGO
  76. 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. 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. 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…)
  79. 79. Gestión de tareas
  80. 80. Gestión de tareas
  81. 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. 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
  83. 83. Tickets Wiki Downloads management GoogleCode FORJAS
  84. 84. SourceForge
  85. 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
  86. 86. Redmine
  87. 87. GitHub • Software as a Service • Public (free) and private (paid) projects • Wiki • Tickets • Release publication • Web page • Git repository • Social network for developers
  88. 88. Tickets Wiki Code GitHub
  89. 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. 90. 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
  91. 91. 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
  92. 92. 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
  93. 93. 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
  94. 94. GitHub -Wiki
  95. 95. GitHub -Wiki
  96. 96. GitHub -Wiki
  97. 97. GitHub -Wiki
  98. 98. GitHub - Eclipse • Eclipse tiene varios plugins para mejorar la integración con varias forjas • GitHub tiene algunos plugins específicos
  99. 99. GitHub - Eclipse • Mylyn  Plugin para gestionar tareas en Eclipse  Editor de issues  Interfaz centrado en tareas
  100. 100. GitHub - Eclipse • GitHub Mylyn Connector  Es necesario instalar un plugin al plugin para conectarse a GitHub
  101. 101. 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)
  102. 102. GitHub - Eclipse • Eclipse tiene un plugin para editar documentos en formato wiki • El plugin se llama “Github flavored Markdown viewer”
  103. 103. GitHub - Eclipse
  104. 104. @fgortazar @micael_gallego Gracias!!! PATXI GORTÁZAR MICAEL GALLEGO
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×