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 modicaciones
en repo local
Contribuidor envía pull request
Mantenedor añade remotos y testea localmente
Mantenedor publica en su repo
Workow 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
Workow 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
Conguración inicial
3 niveles de conguració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
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
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 reeja 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
Conictos
Si hemos cambiado la misma parte del archivo
en dos branches, git pide ayuda
El working dir queda a medias, debemos resolver
y conrmar el commit
git status is your friend (buscad unmerged)
Slide 45
Slide 45 text
Conictos
Conictos aparecen así:
<<<<< HEAD:fichero
ancestro 1
=======
ancestro 2
>>>>>>
Para resolver, podemos ayudarnos de
git mergetool
Slide 46
Slide 46 text
Conictos
Al ir resolviendo cada chero, lo añadimos al
índice
Finalmente, conrmamos 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 modica
git merge origin/branch
Slide 50
Slide 50 text
Branches remotos
Tracking branch: branch pre-congurado 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 especicado
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 congurar 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