sábado 5 de noviembre de 2011

Introducción a Git y GitHub

No puedo empezar este post sin mencionar que para mucha gente aún el uso de CVS o Subversion como herramientas para el control de versiones es muy común en sus proyectos, no quiero caer en el punto de despreciar una herramienta en particular ya que todas son valiosas o fueron valiosas en determinados momentos del tiempo, pero es importante decir que gracias al Software Libre y Código Abierto justamente muchas herramientas mejoran gracias a las seguimiento de buenas practicas por parte de los desarrolladores que trabajan en ellas.

Una de estas herramientas es Git. Git es un sistema de control de versiones distribuido que permite llevar el versionamiento de archivos, en nuestro caso especifico nos permite versionar el código de nuestros proyectos.

Este post no pretende ser una introducción completa a Git ya que existe excelente información al respecto:


Mas bien la idea es introducirlos un poco al mundo de GitHub, GitHub es una aplicación web mundialmente conocida que aloja proyectos open source y proyectos privados; a proposito proyectos open source muy importantes como el Kernel de Linux, jQuery, Ruby on Rails entre otros.



Mas en: https://github.com/popular/watched

GitHub

Github es una aplicación web de colaboración que te permite llevar el historial de tu código, seguir proyectos, colaborar con proyectos en fin hacer que la experiencia de escribir código sea mas social,

Aunque debo decir que una de las partes que más me ha gustado el tiempo que llevo usandolo es, encontrar una increíble cantidad de desarrolladores talentosos a los cuales uno puede seguir y aprender muchísimo.

Bueno manos a la obra que debo hacer para empezar a alojar mi código en GitHub?, pues como requisito antes de pensar en crear una cuenta, deberías tener instalado Git, sigue los siguientes pasos para instalar. (Lo siento si no usas alguna distribución basada en Unix, como Ubuntu o Mac OS X, asumo que al menos tienes nociones básicas del uso de comando en una consola en entornos Unix, sino es así ya es tiempo de que te cuestiones la razón de tu existencia :), es broma.. no es tan malo, revisa un poco y luego pasate por este post).

Pre requisitos  

1. Instalar Git

Ubuntu 

$ sudo apt-get install git-core

No viene mucho al caso (por ahora) pero si eres novato en Ubuntu te recomiendo instalar. 

$ apt-get install build-essential

Mac OS X

Si usas Mac OS X deberías conocer esta herramienta: http://mxcl.github.com/homebrew/

$ brew install git

Luego de la instalación, comprueba si efectivamente git fue instalado correctamente


$ git --version
git version 1.7.7

2. Autenticación basada en llaves SSH (SSH Keys)

En este punto es importante que sepas que GitHub utiliza una infraestructura de llave publica/privada para establecer una conexión segura entre tu computador y GitHub mediante SSH. Es posible que ya cuentes con tus "SSH Keys", si esto es así deberías tener este directorio oculto llamado ".ssh" en tu directorio personal:

$ ls ~/.ssh
config  id_rsa  id_rsa.pub  known_hosts

Si es así puedes saltarte al paso 3, de lo contrario sigue leyendo.

Entonces lo primero, es crear nuestras llaves de la siguiente manera:

$ ssh-keygen -t rsa -C "tu_correo@ejemplo.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/your_user_directory/.ssh/id_rsa):<preciona ENTER>
Luego te pedira que ingreses una frase, si gustas puedes escribir una frase sino puedes presionar ENTER

Enter passphrase (empty for no passphrase):<presiona ENTER>
Enter same passphrase again:<presiona ENTER>

Luego de deberias ver algo parecido a esto:
Your identification has been saved in /home/tu_directorio_local/.ssh/id_rsa.
Your public key has been saved in /home/tu_directorio_local/.ssh/id_rsa.pub.
The key fingerprint is:
01:0f:f4:3b:ca:85:d6:17:a1:7d:f0:68:9d:f0:a2:db user_name@username.com
The key's randomart image is:
+--[ RSA 2048]----+
|     .+   +      |
|       = o O .   |
|        = * *    |
|       o = +     |
|      o S .      |
|     o o =       |
|      o . E      |
|                 |
|                 |
+-----------------+

Listo, puedes ver cual es tu clave publica así

$ cat .ssh/id_rsa.pub

3) Crear una cuenta en GitHUB

Ve al sitio de GitHub y create una cuenta.



Una vez que ya tengas tu cuenta en GitHub es tiempo de agregar tu "SSH Key", para ello ve a  las "Configuración de tu cuenta" en GitHub.


Luego click en "SSH Public Keys" y después en "Add another public key"



En este punto deberás copiar y pegar la clave publica (SSH Key) que generamos en el paso dos, para copiarla puedes hacer lo siguiente.


$ cat .ssh/id_rsa.pub
ssh-rsa asdsadwewqeqweqfdevgBU7EIHJP1VBICWAjiEJ+EvUiroAwAEkskTjKPM8HsOOvSVsml7c43eQxhAasdasd6VEBxssHqOasdsad8uUdg1+qQa/Estakeynoesvalida:)RASAasdasdUasdasdSulAiZuZkSDznKvoR8CDNasdasd2wasdasdSP+Lwsh8y+YUwrWasdassa+kADnaj+QirwwasdhSgtLBXpuUl2mtNENgXasdasdasdadNSV0BPtasdasdHxSkKasdasdGYZs55+s3 tu_correo@ejemplo.com

copia y pega la llave ssh en GitHub y dale click al botón de "Add Key".


Es de suma importancia de que copies bien y pegues bien la llave ssh de lo contrario la conexión con GitHub fallara.

Una vez echo esto si todo ha ido bien, comprueba tu conexión contra GitHub así.


$ ssh -T git@github.com
Hi comotellames! You've successfully authenticated, but GitHub does not provide shell access.


4) Crear nuestro primer repositorio

Ahora es tiempo de crear nuestro primer repositorio y empezar a jugar un poco con Git y Github, para ello vamos a nuestro "Dashboard"




Luego le damos click en "New Repository"


Llenamos los datos de nuestro proyecto.


Luego de ello es muy sencillo crear nuestro repositorio, GitHub incluso nos muestra las instrucciones que debemos seguir:




Entonces empecemos

5) Subir nuestros cambios a GitHub

Lo primero es configurar git en nuestra computadora a fin de que sepa que persona sube el código, para ello realizamos:


$ git config --global user.name "TU NOMBRE"
$ git config --global user.email tu_correo@ejemplo.com

Por lo general para mis proyectos, todo el código lo tengo en una carpeta llamada "code" en mi directorio personal, si tu no lo tienes puedes crear el directorio.

$ mkdir code
$ cd mkdir

Luego dentro, podemos seguir las instrucciones de GitHub para crear el repositorio.


$ mkdir demogit
$ cd demogit

Inicializamos el repositorio

$ git init

Creamos un archivo vacio

$ touch README

Agregamos el archivo creado a git

$ git add README

Subimos el archivo como nuestro "primer commit", es importante mencionar que a diferencia de otros herramientas de control de versiones como CVS y Subversion, Git es un sistema de versionamiento distribuido, esto quiere decir que al realizar un "commit" este se hará unicamente localmente, es decir podemos llevar un control de cambios localmente con varios "commits".

$ git commit -m 'primer commit'

Una vez registrado nuestros cambios locales, es hora de subir los cambios al repositorio de GitHub, para ello agregamos la dirección del repositorio remoto. Este paso unicamente lo realizamos la primera vez que subimos el código, es decir la siguiente vez que vayamos a subir cambios del código no tendremos que agregar la dirección del repositorio remoto de nuevo.

$ git remote add origin git@github.com:cbfolks/demogit.git

Recuerda que en el paso anterior la dirección que estoy usando es "git@github.com:cbfolks/demogit.git", la dirección para el repositorio que hayas creado para tí seguramente sera diferente :)


Finalmente subimos los cambios a GitHub

$ git push -u origin master

Y eso es todo en el ejemplo que estoy usando mi repositorio esta aqui

https://github.com/cbfolks/demogit

Ahora es tiempo de jugar un poco haciendo cambios  a nuestro repositorio.

6) Clonar un repositorio, hacer y subir cambios.


Aunque te sorprenda un poco, lo que primero aremos ahora es borrar nuestro proyecto localmente, esto no nos preocupa ya que ya lo tenemos en GitHub.

Nos vamos a nuestra carpeta "code" y borramos la carpeta de nuestro ejemplo (demogit).

$ cd ~/code
$ rm -Rf demogit

Luego en el el sitio de GitHub de nuestro proyecto


Clonamos el proyecto a nuestra computadora.


$ git clone git://github.com/cbfolks/demogit.git

Deberías ver algo como esto:

Cloning into demogit...
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 3 (delta 0)
Unpacking objects: 100% (3/3), done.


Listo tenemos nuestro proyecto clonado, ingresamos a la carpeta de nuestro proyecto.

$ cd demogit

Vamos a realizar un pequeño cambio a nuestro archivo README que creamos en el paso 5. Abre el archivo con tu editor preferido y escribe algo; en mi caso usare el el editor VIM y simplemente citare una frase de Nikola Tesla.

"La idea vino como un flash de rayos y en un instante la verdad se reveló."

Listo guarda el archivo y nuevamente en la consola miramos los cambios que tenemos en nuestro proyecto hasta el momento.


$ git status

Deberías ver algo como esto:

# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#      modified:   README
#
no changes added to commit (use "git add" and/or "git commit -a")



Esto nos indica que el archivo README ha sido modificado, tambien podemos ver que partes del archivo fueron cambiadas.

$ git diff

Deberías ver algo así:


diff --git a/README b/README
index e69de29..5f653de 100644
--- a/README
+++ b/README
@@ -0,0 +1 @@
+La idea vino como un flash de rayos y en un instante la verdad se reveló.


Bien es tiempo de subir estos pequeños cambios a GitHub, para ello primero agregamos los archivos cambiados a git para que registre los cambios.

$ git add -A

Luego hacemos un "commit" localmente

$ git commit -m"frase de Nikola Tesla agregada al archivo README"

Si miramos el estado del proyecto.


$ git status

Nos debería mostrar lo siguiente

# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
nothing to commit (working directory clean)

Esto quiere decir que tenemos "1 commit" pendiente de subir. Pues finalmente subimos los cambios al repositorio de GitHub

$ git push origin master

Deberías ver algo como esto:


Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 335 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@github.com:cbfolks/demogit.git
   f626800..26d78b3  master -> master

Y bueno esto ha sido todo, el repositorio de ejemplo que hemos realizado lo puedes encontrar en:

https://github.com/cbfolks/demogit

Espero que esta pequeña introducción a Git y GitHub les haya sido de utilidad, esperanos pronto en mas artículos no solo sobre git sino sobre mas cosas relacionadas con programación.


Salu2!!



Bonus:

Github no es el unico servicio que puede alojar tu código, exciten más opciones:


https://bitbucket.org/
https://codeplane.com/







0 comentarios:

Publicar un comentario en la entrada