Skip to content

Git: Bitbucket y GitHub desde la trinchera

Alejandro Romero edited this page Oct 31, 2016 · 1 revision

Para instalar GIT, lo primero que tienes que hacer es descargar desde el sitio oficial:

#### Pagina Oficial GIT

Sección "Downloads" y seleccionamos nuestro sistema operativo (SO), aunque el sitio oficial detecta el SO y la versión indicada, pero esto no siempre funciona.

En este momento estas instalando GIT para trabajar en consola, NO estamos instalando los clientes el cual incluyen interfaces de usuario amigables para gestionar los proyectos, la única diferencia en la experiencia es que solucionar problemas no es tan factible como en la consola.

Para trabajar con los clientes de GIT (cliente Github, cliente Bitbucket), cada sitio oficial cuenta con su propio GUI, ahí ustedes pueden descargar los clientes; ¡pero! para una mejor gestión de su código es recomendable la terminal.

¿Qués es GIT?

Linus Torvalds bromea sobre el nombre de "Git", porque en el argot del Inglés británico se utiliza para referirse a una persona estúpida o desagradable.

¿Por qué Git & GitHub y no otros?

Chris Wanstrath, co-foundador y CEO de GitHub. en un articulo para Forbes dice:

"Git es diferente. Es un VCS Distribuido, lo que significa que no necesita un servidor. Puede obtener el código de un amigo en una cafetería a través de WiFi. Los servidores son opcionales. Todo el mundo tiene la capacidad de compartir código con cualquier otra persona usando Git".

### Terminología Git Términos importantes al trabajar con GIT:

  • Repositorio: Las diferentes versiones en el tiempo.
  • Commit: Confirmar cambios sobre el código.
  • Branch: Línea de código por separado con su propia historia.
  • Master: Rama principal por default.
  • Revision: Representa una versión del código fuente.
  • Diff: Como si fuese un Delta, Sólo Cambios.
  • Checkout: Crear una copia local del repositorio.
  • Tag: Apunta a cierto espacio especifico en el tiempo en una rama.

¿Está GIT instalado?

Para confirmar que GIT esté totalmente listo para trabajar, abrimos la terminal o consola y ejecutar el siguiente comando:

$git --version
git 2.10.2

Configurando y personalizando GIT

Una vez instalado, debemos configurar GIT.

¿Por qué configurar? debemos decirle con qué nombre y correo vas a utilizar GIT, lo cual indica que vamos estar trabajando con un "nombre" y un correo el cual indicara quien hizo un commit y cual es el doliente:

# Configure el usuario que se utilizará por git
# Claro utilice su nombre
git config --global user.name "Su Nombre y Apellido - usuario github o bitbucket"
# Luego el correo electrónico
git config --global user.email "usuario@correo.com"
#verificando configuración
git config --list

Ignorando archivos en GIT

Generalmente es necesario omitir algunos archivos e incluso carpetas completas Git tiene dos formas:

# A través del archivo .gitignore ubicado en la raíz del proyecto
vim .gitignore # Sistemas operativos en base POSIX
----------
bin
*pyc
----------
# A través del directorio .git en la ruta .git/info/exclude
vim .git/info/exclude
----------
bin
*pyc
----------

Pueden generar los .gitignore con herramientas en linea como gitignore.io

Jugando con GIT

Creando contenido e interactuando con Git

#en mis Documentos creamos la carpeta prueba
mkdir prueba
# Entrando a prueba
cd prueba
# Creando un nuevo directorio
mkdir archivos
# creando algunos archivos
touch archivo1
touch archivo2
touch archivos/data.txt
# Ahora escribimos algún texto en archivo1
ls >archivo1

Creando repositorio, usaremos "add" y "commit"

# Inicializar un repositorio en Git
git init
# con add adjuntamos todos los archivos que encuentre en el repositorio Git 
git add .
# Haciendo commit de los archivos en el repositorio locas
git commit -m "Initial commit"
# Verificando con el Log de eventos de Git
git log

Resultado interesante

prueba alejo8591$ git log
commit 65c96a60cb8e7d27f1c4847b84446429a31d425a
Author: Alejandro Romero <alejo8591@gmail.com>
Date:   Wed May 16 17:26:23 2012 -0500

    initial commit

Y Que rayos es esto?, Que Significa?

Ciclo de vida (Lifecycle) local para los archivos en GIT

Los tres (3) estados de GIT

Comparando cambios

Comparando archivos por medio de diff

# modificando archivos
echo "creando novedad" > archivo01
echo "Otra novedad sobre los archivos" > archivo02
# Verificando cambios con el comando diff
git diff
# Commit de los cambios, -a carga los archivos modificados
# cuidado pues no adiciona los nuevos archivos por defecto
git commit -a -m "Algunos cambios"

Resultado de la comparación archivos por medio de diff

prueba alejo8591$ git diff
diff --git a/archivo1 b/archivo1
index 4365ca9..3ade87d 100644
--- a/archivo1
+++ b/archivo1
@@ -1,3 +1 @@
-archivo1
-archivo2
-archivos
+creando novedad

#Corrigiendo mensaje de un commit 
git commit --amend -m "actualizando mensaje"

Eliminando archivos

# Creando un archivo
touch eliminado.txt
git add . && git commit -m "actualizando repositorio con eliminado.txt"
# Eliminando archivo
rm eliminado.txt
# Pero de la forma estándar no funciona no actualiza el archivo eliminado en el repositorio
git add . && git commit -m "a new file has been created"
# de nuevo es necesario usar la opción "-a"
git commit -a -m "se elimino el archivo eliminado.txt"
# Pero en la vida real se hace así
git add -A . 
git commit -m "se elimino el archivo eliminado.txt"

Trabajando con servidor remoto (GitHub, Bitbucket y otros...)

Trabajando con Servidores Remotos en GIT generalmente se hace con acceso Secure Shell (SSH), pero existen cuatro (4) formas de acceder.

Protocolos de seguridad en GIT

  • Protocolo Local El repositorio remoto es simplemente otra carpeta en el disco.
  • Protocolo SSH Ss el único protocolo de red con el que puedes facilmente leer y escribir
  • Protocolo Git Similar al protocolo SSH; pero sin ningún tipo de autentificación, es un daemon especial, que escucha por un puerto dedicado (9418)
  • Protocolo HTTP/S Basta con situar el repositorio Git bajo la raiz de los documentos HTTP y preparar el enganche (hook) 'post-update' adecuado.

Creando Keys SSH para servidores Remotos (I)

# Comprobar si hay un directorio llamado ".ssh" en su directorio de usuario
cd ~/.ssh
# verificar si existen archivos key ya creados 
ls
config  id_rsa  id_rsa.pub  known_hosts
# Si existen cree un backup de ellos, por si los necesita en el futuro, sino puede omitir estos pasos
mkdir key_backup
# Copiando todos los archivos referentes a keys en "key_backup"
cp id_rsa* key_backup
# Despues de copiado lo borramos para generarlo
rm id_rsa*

#### Creando Keys SSH para servidores Remotos (II)

# Creando una nueva key con encriptación RSA
ssh-keygen -t rsa -C "your_email@youremail.com"
# Le saldra el siguiente mensaje
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/you/.ssh/id_rsa): [Presione enter]
Enter passphrase (empty for no passphrase): [contraseña]
Enter same passphrase again: [Verificando contraseña]
# Luego debe salir el siguiente mensaje
Your identification has been saved in /Users/you/.ssh/id_rsa.
Your public key has been saved in /Users/you/.ssh/id_rsa.pub.
The key fingerprint is:
01:0f:f4:3b:ca:85:d6:17:a1:7d:f0:68:9d:f0:a2:db your_email@youremail.com
# Por ultimo copiamos el contenido de la id_rsa.pub en el portapapeles del S.O.
pbcopy < ~/.ssh/id_rsa.pub

Ciclo de vida (Lifecycle) local y remoto para los archivos en GIT

Ciclo de vida

## Branching

Ramificaciones (Branching) en GIT (I)

Que significa? Cuando se ha tomado la rama principal de desarrollo (master) y a partir de ahí has continuado trabajando sin seguir y alterar la rama principal de desarrollo.

branching

Trabajando con un caso de estudio

Se asume la siguiente situación, de nuestro repositorio

primer momento

Creando Rama llamada "bug"

# Creando una rama con el comando checkout
git checkout -b bug
 Switched to a new branch "bug"
# Otra Opción puede ser
git branch bug
git checkout bug

Creando rama

Trabajando en la Rama llamada "bug"

# Creando una rama con el comando checkout
# Modificando el archivo1 con "solución del Bug"
echo "Solucinando Bug" > archivo1
# Cargando al estado staging area
git add archivo1
# Listo para enviar al repositorio remoto
git commit -a -m 'Solucionando Bug en nueva Rama'
# Enviando a nuestro servidor del repositorio
git push origin master

trabajando en iss53

Merge de la Rama llamada "bug" y "master"

# Volviendo a la rama "master"
git checkout master
Switched to branch 'master'
# Haciendo merge en de "bug" en "master"
git merge bug
# Debe presentar la siguiente info 
Updating HASH
Fast-Forward
archivo1 |     2 +-
1 file changed, 1 insertion(+), 1 deletion(-) 

merge

Gestionando Ramificaciones (Branching) en GIT

# Verificar ramas creadas
$ git branch
  bug
* master
# última confirmación de cambios en cada rama
$ git branch -v
# ramas que han sido fusionadas en la rama activa
$ git branch --merged
# ramas que contienen trabajos sin fusionar aún
$ git branch --no-merged
# Eliminar rama
git branch -d testing