Slide 1

Slide 1 text

git & GitHub 11 Victor Jalencas

Slide 2

Slide 2 text

qué es git? qué es un DVCS?

Slide 3

Slide 3 text

git vs the world

Slide 4

Slide 4 text

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 ✔ ✘

Slide 5

Slide 5 text

git es fácil

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

- ) '.,  "        http://redmonk.com/sogrady/2011/06/02/blackduck-webinar/

Slide 8

Slide 8 text

Workows de trabajo

Slide 9

Slide 9 text

Puede convenir tener un servidor central: disponibilidad, autoridad, integración Típico: servidor en LAN Práctico: git hospedado: GitHub, Unfuddle, repo.or.cz

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

1. Instalador de git-scm.org 2. Xcode 4 3. Homebrew 4. github for Mac Instalación de git brew install git

Slide 13

Slide 13 text

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 [email protected] git config --global core.editor mate #opcional ssh-keygen # si no tienes claves públicas

Slide 14

Slide 14 text

Uso de git Existen tantas maneras de usar git como usuarios git help comando

Slide 15

Slide 15 text

Hacerse con un repositorio Creación mkdir project; cd project git init Clonado git clone url altname

Slide 16

Slide 16 text

Preguntando por el estado git status

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

Working dir Staging area git add git commit git reset git checkout git commit -a Repo

Slide 19

Slide 19 text

Comparando directorio y staging area git diff

Slide 20

Slide 20 text

Staging area vs repo git diff --staged

Slide 21

Slide 21 text

Commit git commit git commit -v # Incluye diff en mensaje git commit -m “mensaje” # sin editar mensaje

Slide 22

Slide 22 text

Eliminación de archivos git rm fichero # Del índice y el work dir git rm --staged fichero # Solo del índice

Slide 23

Slide 23 text

Renombrado de archivos git mv old new mv old new git rm old git add new

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

git log --since=2.weeks --until=1.week git log --author fulanito git log --committer fulanito git log --grep msg git log -- path Filtros

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

Colaborando con otros

Slide 28

Slide 28 text

git remote -v # lista remotos git remote add shortname url Gestión de remotos

Slide 29

Slide 29 text

git fetch shortname git pull Obteniendo cambios

Slide 30

Slide 30 text

git push reponame branchname git push origin master Publicando cambios

Slide 31

Slide 31 text

Tags

Slide 32

Slide 32 text

git tag git tag -l pattern Listado de tags

Slide 33

Slide 33 text

git tag tagname Nuevo tag

Slide 34

Slide 34 text

git show tagname Examinando tags

Slide 35

Slide 35 text

git push origin tagname # tag específico git push --tags # todos los tags Push de tags

Slide 36

Slide 36 text

Branches

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

git branch {--merged,--no-merged} Listado de branches

Slide 39

Slide 39 text

git branch nuevo # solo crea, HEAD no cambia Creación de un branch

Slide 40

Slide 40 text

git checkout nuevo # HEAD es ahora nuevo git checkout -b branchname # 2×1, crea y cambia Cambio de branch

Slide 41

Slide 41 text

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)

Slide 42

Slide 42 text

git merge otro # mezcla otro en HEAD Merge de branches

Slide 43

Slide 43 text

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

Slide 44

Slide 44 text

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)

Slide 45

Slide 45 text

Conictos Conictos aparecen así: <<<<< HEAD:fichero ancestro 1 ======= ancestro 2 >>>>>> Para resolver, podemos ayudarnos de git mergetool

Slide 46

Slide 46 text

Conictos Al ir resolviendo cada chero, lo añadimos al índice Finalmente, conrmamos con git commit

Slide 47

Slide 47 text

∃ 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

Slide 48

Slide 48 text

Branches remotos branches readonly que trackean branches en repos remotos No se actualizan por si mismos (hay que usar git fetch origin)

Slide 49

Slide 49 text

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

Slide 50

Slide 50 text

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

Slide 51

Slide 51 text

Push

Slide 52

Slide 52 text

Copia tus commits a un remoto especicado git push origin mybranch git push origin mybrach:ourbranch

Slide 53

Slide 53 text

Cambiando la historia

Slide 54

Slide 54 text

Rebase Historias paralelas en master que interesaría serializar git checkout somebranch git rebase master git rebase master somebranch Facilita el trabajo a mantenedores

Slide 55

Slide 55 text

Achtung! Si los commits ya han sido pusheados, no se pueden rebasear. O atente a las consecuencias…

Slide 56

Slide 56 text

Usando git con Xcode

Slide 57

Slide 57 text

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

Slide 58

Slide 58 text

GitHub

Slide 59

Slide 59 text

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

Slide 60

Slide 60 text

Demo

Slide 61

Slide 61 text

Y en el próximo episodio…

Slide 62

Slide 62 text

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

Slide 63

Slide 63 text

Gracias @jalencas