adaJS
adaJS is a community of women who meet periodically in Barcelona, with the goal of promoting and supporting the growth of the female sector in the field of information technology (IT) through JavaScript and web development
¿Qué es Git? ¿Qué es GitHub?
¿Y esto... para qué me sirve?
¿Qué es Git?
source: git-tower.com
Las versiones son como fotografías que registran su estado en ese momento del tiempo y se van guardando a medida que se hacen modificaciones al código fuente.
source: git-tower.com
Si eres diseñador gráfico o web,
y quieres mantener cada versión de
una imagen o diseño
Si eres desarrollador de software,
y quieres mantener versiones en tus
aplicaciones
etc.
Distribuído, no centralizado
Centralizado
DiDistribuído
Fotografías (snapshots), no diferencias
Guardando diferencias entre ficheros
Guardando snapshots de ficheros
Rápido trabajas en local (incluso sin conexión a internet), sistema de branching muy ligero
Añadir, pero no borrar nunca borra información, lo que hace que sea muy difícil romper algo por error
Git comprueba todo todo es guardado con suma de comprobación de sus contenidos (SHA-1). Así que si se corrompe algo, Git se entera
Instalando Git ...
Configura tu nombre y email
$ git config --global user.name "Ada Lovelace"
$ git config --global user.email "adalovelace@barcelonajs.org"
$ git config --global user.name
"Ada Lovelace"
$ git config --global user.email
"adalovelace@barcelonajs.org"
git config
Convertir una carpeta en un repositorio Git
git init
Esta carpeta escondida contiene la información de Git para nuestro repositorio. ¡Rara vez tendremos que tocar esto!
Consultar el estado del repositorio
git status
Cuando un fichero está listo para el siguiente commit (ya sea nuevo, o existente pero modificado), lo añades al Staging Area
git add
git commit
Añadir al staging area
git add
git add <file> # Añade el fichero <file>
git add . # Añade todos los ficheros
Grabar cambios en el repositorio
git commit -m "Message"
Historial de cambios del repositorio
git log
Snapshot
Refleja el estado del proyecto en un determinado punto en el tiempo
Tú decides cuándo guardar un snapshot
Commit
Acción de crear un snapshot
La evolución de un proyecto puede verse a través de sus commits
Un commit guarda:
1c002dd4b536e7479fe34593e72e6c6c1819e53b
Repositorio
Colección de todos los ficheros (proyecto) y la historia de esos ficheros
Puede estar almacenado en local, en remoto (GitHub) o ambos!
Todos los commits viven en una rama
Puede haber muchas ramas
La rama principal de un proyecto Git se llama master
Branch (rama)
... de esto hablaremos luego
HEAD
Apunta al commit más reciente (casi siempre)
Trabajo en equipo!!!
source: git-tower.com
Source: jahya.net
GitHub es un hub de repositorios Git, permite almacenar gratis repositorios Git
Acceso web para repositorios Git
Gratuito para proyectos libres
"Red social" para programadores, el código es la estrella
Source: jahya.net
git clone
Clonar un repositorio es descargar una copia en local
git push
Subir commits locales al repositorio remoto
git pull
Actualizar la copia local con nuevos cambios remotos
Ejemplo:
Ejemplo:
git push origin master
origin apunta al repositorio remoto (url)
master es la rama de trabajo
Utilizaremos GitHub
Para ello necesitamos:
Un fork es una copia de un repositorio
Normalmente, cuando se quiere contribuir a un proyecto de open source, no se pueden subir commits al repositorio remoto por falta de permisos
La manera de trabajar es:
git clone
git add, git commit
git push
Petición de que el repositorio destino haga pull del nuestro
Solicitamos al repositorio padre que acepte los cambios que hemos hecho en nuestro fork
Los pull request se hacen desde GitHub
Normalmente hay revisores, que aceptan el pull request si están de acuerdo con los cambios
Ejercicio
Cuando un desarrollador empieza una nueva funcionalidad o resuelve un bug, crea una nueva rama donde trabaja, y cuando la termina, fusiona su rama con la rama principal (master)
Las ramas sirven para trabajar en varias features (funcionalidades) de un proyecto a la vez
source: atlassian.com
git branch
git branch <branch_name>
git branch -d <branch_name>
Listado de todas las ramas
Crear una rama llamada <branch_name>
Borrar la rama <branch_name>
git checkout <branch_name>
git checkout -b <branch_name>
Cambiar a rama <branch_name>
Crear y hacer check out de la rama <branch_name>
Cuando el desarrollo de la rama termina, se suele mergear con la rama principal (master, por ejemplo)
Esto significa llevar los cambios hechos de una rama a la principal, junto con su historia de commits
source: atlassian.com
git checkout rama_destino
git merge rama_origen
Trae los cambios de rama_origen a la rama en la que estamos situados
4. Oh no!! Un bug en producción!! Resulta que el link no está apuntando a GitHub, sino que apunta a Bitbucket!!
1. Clona el repositorio:
2. El jefe ha pedido aplicar estilos a index.html. Para ello, crearemos una nueva rama "feature_style". Trabajaremos en ella.
3. Haz la rama "feature_style", centra el contenido y haz el primer commit.
5. Hay que dejar la rama "feature_style", volver a la rama "master" y crear una nueva rama "bugfix" para solucionar el problema!!
6. Lo dicho, crea la rama "bugfix", sitúate en ella, soluciona el bug, y haz commit.
7. Ya está corregido? Comprueba que el link ahora te redirige a GitHub! Es el momento de mergear los cambios a la rama principal "master"
8. Sitúate en master, y haz un merge de la rama "bugfix" sobre "master". El fix deberá estar resuelto en master
9. Ahora vuelve a terminar tu trabajo en "feature_style". Cuando termines, mueve los cambios a master!!
Avanzado!!!
En Git hay mucho más!!!
.gitignore
git stash
git rebase
git reset
Algunos recursos
Tutorial introductorio interactivo
Chuleta de git interactiva
Gracias!!!
By adaJS