
Últimamente estamos trabajando de forma más exhaustiva en varios proyectos con otros colaboradores que encuentran en Git un problema para llevar la gestión de versiones y el código.
Los primero que hay que tener claro a la hora de empezar con Git es que no es sistema de control de versiones como SVN, pertenece a la nueva generación de DVCS, sistemas de control de versiones distribuidos.
El flujo normal en con SVN es de tirar siempre los commits hacia un mismo servidor centralizado, de modo que cada persona implicada en el proyecto trabajara sobre el mismo punto final.
Con Git lo más difícil de entender al principio es la desaparición de esa centralización para entrar en un mundo en el que cada uno tiene su repositorio en local sobre el que hacer los commits, merges, ramas y todas las operaciones que realizaremos sobre un repositorio normal pero en nuestro maquina local.
¿Que sucede con la parte remota y donde esta la colaboración?
En Git se crean repositorios remotos, cada usuario puede tener el suyo (la forma ideal de trabajar) o se puede tener un único repositorio remoto que hacen de principal. Sobre estos repositorios se realizan la mayor parte de veces las operaciones de push, para enviar nuestros commits, o pull, apara actualizar el contenido de nuestro repositorio local pero estas operaciones las veremos con mas detalla más adelante.
En este primer post veremos la gestión de código de forma local.

Instalación de Git
Git está disponible para OSX, sitemas *nix y Windows (como siempre desaconsejo el uso del último para cualquier desarrollador). Desde hace algunas versiones la propia página de git ya tiene instaladores para automatizar esta tarea. Visitad http://git-scm.com, descargar los instalables y no debería de haber mayor problema.
En caso de querer hacerlo “a pelo” tienes varias alternativas:
- OSX: a través de Homebrew con el comando $ brew install git
- Debian: $ sudo apt-get install git-core (aseguraos de tener los sources actualizados)
Para comprobar que todo ha ido ok podemos ejecutar en la consola el comando git para ver la versión
git --version
git version 1.7.7.5 (Apple Git-26)
Creando el primer repositorio local
Ahora vamos a crearnos nuestro primer repositorio local, para ello seguimos los siguientes pasos:
mkdir git1 && cd git1
git1> $ git init .
Initialized empty Git repository in /Users/pablo/git1/.git/
Ya tenemos nuestro repo para empezar a trabajar. Ahora vamos a ver los comandos básicos para agregar información al repositorio, para ello creamos un Readme.md con el comando touch y lo veremos con git status como ha aparecido ese fichero y está pendiente de agregar. Con git add y git commit lo meteremos en el repositorio.
git1> $ touch Readme.md
git1> $ git status
# On branch master
#
# Initial commit
#
# Untracked files:
# (use "git add ..." to include in what will be committed)
#
# Readme.md
nothing added to commit but untracked files present (use "git add" to track)
git1> $ git add .
git1> $ git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
# (use "git rm --cached ..." to unstage)
#
# new file: Readme.md
#
git1> $ git commit -m "First commit"
[master (root-commit) 44cb5da] First commit
0 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 Readme.md
git1> $ git status
# On branch master
nothing to commit (working directory clean)
Hell yeah!! Primer commit… done. Para terminar esta primera parte vamos a repasar los comandos básicos que hemos visto:
- git init . -> crea un repositorio en el directorio indicado
- git status -> no muestra información sobre los ficheros del repositorio
- git add . -> agrega todos los cambios al commit para enviar al repositorio (los ficheros borrados no, lo veremos más adelante)
- git commit -m “msg” -> crea un commit con los cambios agregados y el mensaje indicado. El mensaje es obligatorio.
EXTRA SHOT: git commit -a -m “msg” hace el git add . por lo que no hay que hacerlo. Siendo puristas es mejor pasar el paso previo, pero es un buen atajo.
En la segunda parte veremos:
- la forma correcta de estructurar un repositorio
- el uso de las ramas y su funcionamiento
- agregar nuestro primer repositorio remoto con Github.