title: | Introducción a Git |
---|---|
venue: | 8vas Jornadas de Software Libre de la UNNOBA |
Author: | Martín Gaitán |
css: | slides.css |
skip-help: | true |
Martín Gaitán / @tin_nqn_ / #8JSL / CC-by-sa
data-reveal: | 1 |
---|
- Compañero de Nati, Zamba y Minou
- Hincha de Boca y del dulce de leche
- Ingeniero en Computación (UNC)
- Emprendedor (@Phasety)
- Pythonista desde 2007
- ¿Git? Más que experto, ex-principiante
[email protected] - http://mgaitan.github.io
Note
- flujo totalmente lineal
- impide colaboración
- no hay historia.
- dónde hice qué
data-rotate: | 90 |
---|---|
data-y: | r1400 |
From: Juan <juancho@todavianosegit.com>
To: Pedro <pete@todavianosegit.com>
Subject: Trabajo
Peter, acá te mando el zip con la última versión
que incluye mi parte del trabajo
----
From: Pedro <pete@todavianosegit.com>
To: Juan <juancho@todavianosegit.com>
Subject: Re: Trabajo
Juancito, me olvidé de avisarte que yo ya había
hecho esa parte y cambié la API!
data-rotate: | 90 |
---|---|
data-x: | r-1400 |
Note
- soluciona la sincronizacion de la última versión
- sin merge
data-rotate: | 90 |
---|---|
data-x: | r-1400 |
data-rotate: | 90 |
---|---|
data-y: | r1400 |
Todo un avance, pero...
- Centralizado
- Cuello de botella y Talón de Aquiles
- Dependiente de la red para casi todo
- Commits "bomba"
- Ramas difíciles
- Flujo lineal
- Dificulta el cambio de contexto/colaboración
- Git / Mercurial / Bazaar
- Todas las copias son repositorios
- Dependen menos de la red
- múltiples flujos posibles
- Más respaldos
- Experimentación / Branching fácil
data-rotate: | 90 |
---|---|
data-x: | r-1400 |
Muy bien diez felicitado en...
- ¡Velocidad!
- Integridad de datos
- Poca depencia de red
- Redundancia: todos son clones
- Branching y merging fácil: flujo versátil
- Bancarse proyectos como Linux
- Github
data-rotate: | 90 |
---|---|
data-y: | r1400 |
- La documentación también es distribuída ;-)
- La UI está llena de WTF!
- No hay una manera obvia
- Muchos nombres para referirse a lo mismo
data-rotate: | 90 |
---|---|
data-x: | r-1400 |
data-rotate: | 0 |
---|---|
data-y: | r1400 |
Windows
http://code.google.com/p/msysgit
Linux
apt-get install git
OS X
brew install git
data-rotate: | 90 |
---|---|
data-y: | r1400 |
Quién sos
git config --global user.name "Martín Gaitán"
git config --global user.email [email protected]
Tu editor
git config --global core.editor vim
Crear un repo local
git init
Luego se pueden declarar repos remotos
git remote add origin https://github.com/mgaitan/intro-git.git
O directamente clonar un repositorio
git clone https://github.com/mgaitan/intro-git.git .
Cambios específicos
git add README.txt
git commit -m 'Contenido básico en el README'
O todos los cambios en archivos trackeados
git commit -am "El reactor nuclear funciona.
> Faltan tests del disparador"
La brújula
git status
El libro de viaje
git log
GUIs
gitk / gitg / tig / qgit
Corregir el último commit
git commit --amend
Quitar del stage
git reset HEAD file.py # o bien
git rm --cached file.py
Restaurar archivo
git checkout file.java # por defecto ``HEAD``
git checkout [REV] -- file.java # SHA1, tag, rama
Revertir commit
git revert 1776f5
Unstage (quitar del proximo commit)
git rm --cached file.py
Dejar de trackear:
git rm file.py
Cambios locales
git diff
Cambios en stage
git diff --cached
Respecto a una revision
git diff 1776f5
Visualmente
meld . # winmerge, kdiff3, otros...
data-rotate: | 90 |
---|---|
data-x: | r-1400 |
No queremos control de todo
*.pyc
*.swp
/build/
/doc/[abc]*.txt
.pypirc
*.egg-info
Note
- Blank lines or lines starting with # are ignored
- Standard glob patterns work
- End pattern with slash (/) to specify a directory
- Negate pattern with exclamation point (!)
data-rotate: | 90 |
---|---|
data-y: | r1400 |
- Son técnicamente iguales a nuestra copia de trabajo
- Pueden ser locales o remotos (ssh, https, etc.)
$ git remote -v
origin git://github.com/mgaitan/intro-git.git (fetch)
origin git://github.com/mgaitan/intro-git.git (push)
data-rotate: | 90 |
---|---|
data-x: | r-1400 |
Sin default
git push <remote> <rbranch>
O definimos default remoto para la rama actual
git push -u <remote> <rbranch>
Y luego
git push
data-rotate: | 90 |
---|---|
data-y: | r1400 |
git pull [<remote> <rbranch>]
pull == fetch + merge
Ponerle "nombre" a una revisión.
git tag v0.1.0
Los tags son locales, pero se pueden pushear
git push --tags
De rama en rama se ve aquel amor que juraba que no me habría de olvidar
—Los Tigres del Norte, De rama en rama
- Cambio de contexto indoloro (locales y rápidos)
- Son punteros móviles a un commit
- La rama por omisión se llama master
Note
Factores externos necesitan inevitablemente de cambios de contexto.
- Un bug severo se manifiesta en la última versión sin previo aviso.
- El plazo para alguna presentación se acorta.
- Un desarrollador que tiene que ayudar en una sección indispensable del proyecto está por tomar licencia.
- Simplemente necesitas probar una idea
En cualquier caso, debes soltar abruptamente lo que estás haciendo y enfocarte en una tarea completamente diferente.
data-rotate: | 90 |
---|---|
data-x: | r-1400 |
git branch experimento_loco
git checkout experimento_loco
o directamente:
git checkout -b experimento_loco
Cambiar de rama
git checkout NOMBRE_RAMA
checkout
requiere todo limpio.
stash
es nuestra alfombra para esconder por un rato
git stash
git checkout NOMBRE_RAMA
...
git checkout NOMBRE_RAMA_ORIGINAL
git stash pop
data-rotate: | 90 |
---|---|
data-y: | r1400 |
Desde otra rama. Ej: master
git merge [--no-ff] experimento_loco
data-rotate: | 90 |
---|---|
data-x: | r-1400 |
Corregimos a mano
[corregimos los conflictos en el editor]
git add file.rb
git commit -m 'mezclando la rama X. corregi a mano el merge ...'
O forzamos lo nuestro / lo de ellos
git checkout --ours file.rb # o --theirs
git add file.rb
git commit
data-rotate: | 0 |
---|---|
data-y: | r1400 |
- Mover el origen de la rama
- Muy útil para reescribir la historia
- Recomendado antes de un merge a master
# en feature-xyz
git rebase master
data-rotate: | 90 |
---|---|
data-y: | r1400 |
- Bitbucket / Gitorius
- Server del trabajo / facu
- Pero especialmente...
data-rotate: | 90 |
---|---|
data-x: | r-1400 |
- No es sólo hosting git gratis (para software libre)
- Es una plataforma social y profesional
- ¡Colaborar con OSS nunca fue tan fácil!
- Gestión de proyectos / comunicación / revisión / etc.
- Enterarse de tendencias y aprender de cracks
Código mata curriculum
data-rotate: | 90 |
---|---|
data-y: | r1400 |
- Progit
- Git magic
- Githug
- Github help
- Esta charla: http://github.com/mgaitan/intro-git
data-rotate: | 90 |
---|---|
data-rotate-y: | 180 |
data-y: | r1400 |
Note
Bibliografía
http://dbrgn.ch/slides/20130207_getting_git/ http://www.slideshare.net/CarlosTaborda/why-git-sucks-and-youll-use-it-anyways http://www.slideshare.net/leo.soto/introduccin-a-git https://speakerdeck.com/schacon/introduction-to-git http://www.slideshare.net/mickaeltr/git-github-leverage-your-open-source-projects http://www.slideshare.net/anildigital/git-introduction