curso-git



curso-git

1 0


curso-git

Git Course presentation slides

On Github sinaptica / curso-git

Sólo los débiles hacen copias de seguridad en cintas: los hombres de verdad tan solo suben sus cosas importantes a un servidor FTP, y dejan que el resto del mundo las replique.

-- Linus Torvalds en 1996

Introducción

Conociendo git

¿Qué pasa sin Git?

Que puedo hacer con Git?

  • Trabajar con tranquilidad y confianza
  • Conocer el historial de cambios
  • Realizar pruebas en entornos reales
  • Volver al último estado estable
  • Identificar culpables de un bug
  • Mejorar la comunicación del equipo
  • Trabajar simultaneamente en la misma funcionalidad
  • Documentar el proyecto

Trabajo en equipo con Git

Ventajas de usar Git

  • Sistema Distribuido
  • Alta Disponibilidad
  • Sólo un directorio oculto .git por repositorio
  • Mejor utilización de disco, compresión y rendimiento
  • Mejora la colaboración
  • Hace tu vida mas fácil

Ejemplo

Repo del curso

Markdown

Antes de empezar...

Markdown es un lenguaje de marcado ligero de máxima legibilidad tanto en sus forma de entrada como de salida, usando texto plano.

Markdown Sintax

Headings 
# Title heading

Lists
* first item
* second item

Styling text
*This text will be italic*
**This text will be bold**

Blockquotes
> Pardon my french

Markdown Basics

Online Editor

GitHub

GitHub es una plataforma de desarrollo colaborativo para alojar proyectos utilizando el sistema de control de versiones Git.

GitHub.com

GitHub-features

GitHub Features

Instalación

«640K deberían ser suficientes para todo el mundo»

-- Bill Gates

Instalación

OSX

brew install git

GNU/Linux

sudo apt-get install git-core #ubuntu
yum install git-core #centos

Windows

Git for Windows

Generating SSH keys

Tutorial: Generating SSH Key

conceptos báscos de Git

«El buen código es su mejor documentación»

-- Steve McConnell

Repositorio

El repositorio es el lugar en el que se almacenan los datos actualizados e históricos de cambios, a menudo en un servidor.

Ramificar (bifurcar)

Un módulo puede bifurcado en un instante de tiempo de forma que, desde ese momento en adelante se tienen dos copias (ramas) que evolucionan de forma independiente siguiendo su propia línea de desarrollo.

Commit

Un commit sucede cuando una copia de los cambios hechos a una copia local es escrita o integrada sobre el repositorio.

Conflicto

Circunstancia en la que el sistema es incapaz de fusionar los cambios automáticamente, el usuario y debe resolver el conflicto combinando los cambios, o eligiendo uno de ellos para descartar el otro.

Merge (fusionar)

Una integración o fusión une dos conjuntos de cambios sobre un fichero o un conjunto de ficheros en una revisión unificada de dicho fichero o ficheros.

Fork

Es la creación de un proyecto en una dirección distinta de la principal u oficial tomando el código fuente del proyecto ya existente.

Ver: Distribuciones de Linux

Tag

Darle a alguna versión de cada uno de los ficheros del módulo en desarrollo en un momento preciso un nombre común ("etiqueta" o "rótulo") para asegurarse de reencontrar ese estado de desarrollo posteriormente bajo ese nombre. Los tags permiten identificar de forma fácil revisiones importantes en el proyecto.

Comandos comunes en git

"El software es como el sexo: mejor si es libre y gratis"

-- Linus Torvalds

git init

git init

Transforma el directorio actual en un repositorio Git. Esto agrega una carpeta oculta .git en el directorio actual haciendo posible empezar a guardar las reviciones del proyecto.

git clone

git clone <repo>

Descarga el repositorio especificado en <repo> y se posiciona en la rama master.

git commit

git commit `<file>` -m 'Any message'
git commit -am 'Any message'

Confirma los cambios realizados desde el último commit, exceptuando los archivos no trackeados. Actualiza el indice eliminando los punteros de archivos eliminados.

git push

git push <remote> <branch>

Empuja (envía) la rama al repositorio remoto.

git pull

git pull <remote> <branch>

Incorpora cambios desde el repositorio remoto a la rama actual.

git branch

git branch    # Lista las ramas locales
git branch -r # Lista las ramas remotas
git branch -a # Lista todas (ambas)
git branch -D <my-branch> # Borra la rama <my-branch>

Lista todas las ramas locales existentes.

git checkout

git checkout <branch>

Cambia la rama de trabajo.

git status

git status

Muestra la lista de archivos que tienen cambios (o que fueron eliminados) con respecto al índice.

git diff

git diff
git diff <commit>
git diff <branch>

Displays the differences not added to the index. Muestra las diferencias no agregadas al índice.

Git Log

git log
git log --oneline

Muestra una lista con los commits recientes(primero el más nuevo).

git add

git add <file> # Agrega una fecha
git add <dir>  # Agrega un directorio
git add --all  # Agrega todos los archivos listados

Agrega archivos al índice para ser comiteados en el futuro.

El comando «checkout»

«Las computadoras son inútiles. Sólo pueden darte respuestas»

-- Pablo Picasso

Restaurar archivo

git checkout <archivo>

Restaura un archivo desde el último commit

Cambiar de rama

git checkout <rama>

Cambia el HEAD a la rama

Nueva rama

git checkout -b <rama>

Crea una nueva rama local con el nombre y se sitúa en ella.

Conflicto - theirs

git checkout <archivo> --theirs

En un conflicto, aplica en los cambios realizados en otra rama.

Conflicto - ours

git checkout <archivo> --ours

En un conflicto, aplica en los cambios realizados en la rama actual.

comandos avanzados en git

Todos somos ignorantes solo que ignoramos distintas cosas.

-- Albert Einstein

Gráfico git log

git log --all --graph --decorate --oneline

Muestra un grafico de ramas en la consola.

git rebase

git rebase <upstream>

Reverts all commits since the current branch diverged from <em>upstream</em>, and then re-applies them one-by-one on top of changes from the HEAD of <em>upstream</em>.

git cherry-pick

git cherry-pick <commit>

Aplica los cambios especificados en <commit> a la rama actual y comitea los cambios.

git stash

git stash [save] [<message>]
git stash list
git stash apply <stash>
git stash pop <stash> #aplica el stash y lo borra de la lista
git stash drop <stash>
git stash clear

Este comando de guardado rápido (stashing) toma el estado del espacio de trabajo, con todas las modificaciones en los archivos bajo control de cambios, y lo guarda en una pila provisional.

git revert

git revert <commit>

Genera automaticamente los cambios opuestos a <commit> y los comitea. Tiene como resultado la cancelación de los cambios de <commit>

git merge

git merge <the-other-branch>

Aplica y fusiona los cambios presesentes en en la rama actual.

git fetch

git fetch <remote> <branch>
git fetch -a

Descarga una rama desde el repositorio remoto.La opción -a descarga todas las ramas remotas.

Buenas prácticas

En teoría, la teoría es igual a la práctica, pero en la práctica, no.

Usar etiquetas

Utilizar PR

Nunca se debe trabajar o pushear a master. En su lugar, usar PR.

git push -u origin pb/my-feature

Hacer code-review

Hacer code-review mejora la calidad del software y permite nivelar los conociemientos del equipo.

Usar nomenclaturas

git checkout -b pb/new-feature

Siempre es oportuno utilizar nomenclaturas para crear ramas, anteponiendo el un prefijo con las iniciales del autor.

< author > / < new_feature >

Adoptar un branching model

Seguir leyendo

herramientas complementarias

Git Extras - Git-Prompt - Git Ignore

aprender-git

Tutoriales y juegos

CodeSchool - Learn Git Branching

Cheatsheet

Interactive Cheatsheet - Print version - One page

Referencia

Atlassian tutorials - Libro git oficial