Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Git & GitHub 101

Git & GitHub 101

Introducción a Git y GitHub durante la conferencia Hello NSCoders II, en Barcelona en Julio de 2011.

F0ea30d1cf345566110f55e87ee7e0d0?s=128

Victor Jalencas

March 14, 2012
Tweet

More Decks by Victor Jalencas

Other Decks in Programming

Transcript

  1. git & GitHub 11 Victor Jalencas

  2. qué es git? qué es un DVCS?

  3. git vs the world

  4. git vs subversion svn git trabaja offline ✘ ✔ directorios

    limpios ✘ ✔ repositorios pequeños ✘ ✔ resistente a corrupción ✘ ✔ gestión de ramas fácil ✘ ✔ backup fácil ✔ ✔ velocidad ✘ ✔ interfaz sencilla ✔ ✘
  5. git es fácil

  6. qué es github? github vs {bitbucket, sourceforge, google code}

  7. - ) '.,  "     

      http://redmonk.com/sogrady/2011/06/02/blackduck-webinar/
  8. Workows de trabajo

  9. Puede convenir tener un servidor central: disponibilidad, autoridad, integración Típico:

    servidor en LAN Práctico: git hospedado: GitHub, Unfuddle, repo.or.cz
  10. El mantenedor publica cambios en su repo Contribuidores clonan y

    hacen modicaciones en repo local Contribuidor envía pull request Mantenedor añade remotos y testea localmente Mantenedor publica en su repo Workow de integración
  11. Para proyectos grandes Cada lugarteniente se encarga de un área

    especíca, para la que recibe los pull requests Estos envían cambios al dictador Workow dictador y lugartenientes
  12. 1. Instalador de git-scm.org 2. Xcode 4 3. Homebrew 4.

    github for Mac Instalación de git brew install git
  13. Conguración inicial 3 niveles de conguración: sistema, usuario, proyecto git

    config --global user.name "Perico de los Palotes" git config --global user.email perico@palotes.com git config --global core.editor mate #opcional ssh-keygen # si no tienes claves públicas
  14. Uso de git Existen tantas maneras de usar git como

    usuarios git help comando
  15. Hacerse con un repositorio Creación mkdir project; cd project git

    init Clonado git clone url altname
  16. Preguntando por el estado git status

  17. Añadiendo cheros al staging area git add fichero(s)

  18. Working dir Staging area git add git commit git reset

    git checkout git commit -a Repo
  19. Comparando directorio y staging area git diff

  20. Staging area vs repo git diff --staged

  21. Commit git commit git commit -v # Incluye diff en

    mensaje git commit -m “mensaje” # sin editar mensaje
  22. Eliminación de archivos git rm fichero # Del índice y

    el work dir git rm --staged fichero # Solo del índice
  23. Renombrado de archivos git mv old new mv old new

    git rm old git add new
  24. git log git log -p -2 # Solo 2 commits,

    forma de patch git log --stat # muestra estadísticas git log --pretty=oneline {short,full,fuller} # más/menos detalle git log --pretty=oneline --graph # muestra esquema Examinando historia
  25. git log --since=2.weeks --until=1.week git log --author fulanito git log

    --committer fulanito git log --grep msg git log -- path Filtros
  26. git reset HEAD file # quita del índice, sin tocar

    nada más git checkout -- file # Descarta cambios en work dir git commit --ammend # Reescribe un Deshaciendo cambios
  27. Colaborando con otros

  28. git remote -v # lista remotos git remote add shortname

    url Gestión de remotos
  29. git fetch shortname git pull Obteniendo cambios

  30. git push reponame branchname git push origin master Publicando cambios

  31. Tags

  32. git tag git tag -l pattern Listado de tags

  33. git tag tagname <commit> Nuevo tag

  34. git show tagname Examinando tags

  35. git push origin tagname # tag específico git push --tags

    # todos los tags Push de tags
  36. Branches

  37. Son realmente punteros a commits Se pueden visualizar como vías

    de tren El branch principal se suele llamar master, aunque no tiene por que El branch actual tiene un alias, HEAD
  38. git branch {--merged,--no-merged} Listado de branches

  39. git branch nuevo # solo crea, HEAD no cambia Creación

    de un branch
  40. git checkout nuevo # HEAD es ahora nuevo git checkout

    -b branchname # 2×1, crea y cambia Cambio de branch
  41. Para cambiar de branch, el working dir ha de estar

    limpio Al cambiar de branch, el working dir reeja lo que hay en el repo Crear branches es barato (41 bytes)
  42. git merge otro # mezcla otro en HEAD Merge de

    branches
  43. git branch -d viejuno # fallará si no-merged git branch

    -D viejuno # elimina sí o sí Cleanup Si un branch ya no interesa, podemos eliminarlo
  44. Conictos Si hemos cambiado la misma parte del archivo en

    dos branches, git pide ayuda El working dir queda a medias, debemos resolver y conrmar el commit git status is your friend (buscad unmerged)
  45. Conictos Conictos aparecen así: <<<<< HEAD:fichero ancestro 1 ======= ancestro

    2 >>>>>> Para resolver, podemos ayudarnos de git mergetool
  46. Conictos Al ir resolviendo cada chero, lo añadimos al índice

    Finalmente, conrmamos con git commit
  47. ∃ múltiples aproximaciones al branching branches prolongados que se van

    mezclando en master pero siguen por su cuenta Topic branches: Se usan para implementar un solo feature y luego pueden descartarse
  48. Branches remotos branches readonly que trackean branches en repos remotos

    No se actualizan por si mismos (hay que usar git fetch origin)
  49. Branches remotos Si alguien ha avanzado el branch por su

    cuenta, lo tendremos como origin/branch pero nuestro branch no se modica git merge origin/branch
  50. Branches remotos Tracking branch: branch pre-congurado para seguir un branch

    remoto git checkout -b branchname remote/ remotebranchname git checkout --track remote/branchname Si hicimos un clon, master es un tracking branch
  51. Push

  52. Copia tus commits a un remoto especicado git push origin

    mybranch git push origin mybrach:ourbranch
  53. Cambiando la historia

  54. Rebase Historias paralelas en master que interesaría serializar git checkout

    somebranch git rebase master git rebase master somebranch Facilita el trabajo a mantenedores
  55. Achtung! Si los commits ya han sido pusheados, no se

    pueden rebasear. O atente a las consecuencias…
  56. Usando git con Xcode

  57. Xcode 3 es totalmente ajeno a git Xcode 4 puede

    trabajar con git, con ciertas limitaciones Xcode 4 no crea .gitignore ni $GIT_DIR/info/exclude
  58. GitHub

  59. GitHub es usuario-céntrico, no proyecto-céntrico GitHub es una red social

  60. Demo

  61. Y en el próximo episodio…

  62. Recombinación y partición de commits Stashes Creación de branches vacíos

    Alias Localización de la primera aparición de un bug Como congurar un servidor central Blame Hooks Recogida de cerezas! Nomenclatura de commits Adición interactiva Aun más alteraciones de la historia Submódulos Más customización
  63. Gracias @jalencas