Git Workshop
¿Qué es Git? ¿Qué es GitHub?
¿Y esto... para qué me sirve?
¿Qué es Git?
- Sistema de Control de Versiones Distribuído
- Software libre, creado por Linus Tolvards
- Favorece desarrollos no lineales y distribuídos
¿Sistema de Control de Versiones?
source: git-tower.com
- Qué
- Quién
- Cuándo
- Para qué
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.
Y... ¿para qué me sirve un Sistema de Control de Versiones?
source: git-tower.com
- Almacenamiento y backup
- Control de acceso mediante permisos
- Deshacer ilimitado
- Mezclar aportaciones de distintos colaboradores
- Todos se mantienen sincronizados fácilmente
- Histórico de cambios
- Versiones en paralelo
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.
Copiar y Pegar
NO
es Control de Versiones !!!
¿Y por qué Git?
Distribuído, no centralizado
Centralizado
DiDistribuído
¿Y por qué Git?
Fotografías (snapshots), no diferencias
Guardando diferencias entre ficheros
Guardando snapshots de ficheros
¿Y por qué Git?
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
Empecemos a trabajar con Git!!
Instalando Git ...
Configuración inicial
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
Primeros pasos
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!
Estado del repositorio
Consultar el estado del repositorio
git status
Staging area
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
Staging area
Añadir al staging area
git add
git add <file> # Añade el fichero <file>
git add . # Añade todos los ficheros
commit & history
Grabar cambios en el repositorio
git commit -m "Message"
Historial de cambios del repositorio
git log
¿Qué hemos hecho exactamente?
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
Conceptos
La evolución de un proyecto puede verse a través de sus commits
Un commit guarda:
- Cómo han cambiado los ficheros desde el commit previo
- Referencia al commit padre (commit anterior)
-
Código hash id revisión
1c002dd4b536e7479fe34593e72e6c6c1819e53b
¿Qué hemos hecho exactamente?
Repositorio
Colección de todos los ficheros (proyecto) y la historia de esos ficheros
- Ficheros del proyecto (el trabajo del equipo)
- Los commits que ha hecho el equipo del proyecto
Puede estar almacenado en local, en remoto (GitHub) o ambos!
Conceptos
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
¿Qué hemos hecho exactamente?
Conceptos
HEAD
Apunta al commit más reciente (casi siempre)
Repositorios remotos
Trabajo en equipo!!!
source: git-tower.com
Git != GitHub
Source: jahya.net
GitHub es un hub de repositorios Git, permite almacenar gratis repositorios Git
GitHub
Acceso web para repositorios Git
Gratuito para proyectos libres
"Red social" para programadores, el código es la estrella
Source: jahya.net
Git y repositorios remotos
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:
- Clonar repositorio
- Hacer un commit
- Subir cambios al repositorio remoto
- Bajar cambios del repositorio remoto
Ejemplo:
- Clonar repositorio
- Hacer un commit
- Subir cambios al repositorio remoto
- Bajar cambios del repositorio remoto
git push origin master
origin apunta al repositorio remoto (url)
master es la rama de trabajo
Trabajemos con repositorios remotos!
Utilizaremos GitHub
Para ello necesitamos:
- Una cuenta personal de GitHub https://github.com/join?source=header-home
- Crear un fork del proyecto https://github.com/adabcnjs/gitExercise.git
¿Qué es un fork?
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:
- Crear el fork con tu cuenta de GitHub
- Clonar el fork en local
- Hacer los cambios en local
- Subir cambios al fork remoto
- Crear el pull request
git clone
git add, git commit
git push
¿Qué es un pull request?
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
- Clona tu fork en local
- Añade un fichero que se llame "nombre_apellido".txt (ejemplo ada_lovelace.txt)
- Haz un commit con este cambio
- Comprueba el histórico de cambios, para comprobar que tu commit está bien hecho
- Comprueba que no haya cambios en el repositorio remoto
- Sube este cambio al repositorio remoto
- Haz un pull request
Branching
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
Crear/movese entre ramas
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>
Mergear ramas
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
Mergear ramas
git checkout rama_destino
git merge rama_origen
Trae los cambios de rama_origen a la rama en la que estamos situados
Ejercicio 2
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!!!
AdaJS 2017 | Git Workshop
By Carmen Ansio
AdaJS 2017 | Git Workshop
by AdaJS team
- 839