jueves, 21 de noviembre de 2013

Git, qué, por qué y cómo


Carpetas, carpetas y más carpetas, eso es lo que uno encuentra en su disco duro cuando aún se es joven en el mundo de la informática ( todos lo hemos sido y en lo personal yo aún me siento así), pero es algo que todos empezamos a mejorar, clasificando la información de mejor manera y usando herramientas para esto. Los desarrolladores de software no son la excepción a esta regla, pero los problemas son un tanto más complejos ahora, puesto que no es solo guardar las carpetas con cientos o miles de líneas, además deben poder usarse comentarios específicos de cada carpeta o archivo, sin contar el hecho de que en cualquier momento podría fallar el disco duro y todo el trabajo se iría al mismísimo infierno (y muchos desarrolladores también pues sus jefes los deportarían). Para solucionar esto se crearon sistemas de control de versiones, en esta ocasión vamos a hablar de uno algo reciente pero muy potente, Git.

¿Qué es Git?
Git es un sistema de control de versiones distribuido, creado por Linus Torvalds con el fin de obtener la mayor eficiencia y la mejor confiabilidad posible. Se dice que es distribuido porque a diferencia de otros como SVN no hay un repositorio central contra el cual otros cargan y descargan actualizaciones,  por el contrario hay múltiples repositorios, unos se configuran como maestros y otros como esclavos y existe la posibilidad de cambiar la configuración en cualquier momento.

svn
Sistema de versiones Centralizado


git
Sistema de versiones distribuido
Como vemos en el gráfico 1 en sistemas centralizados de control de versiones como SVN todas las máquinas se sincronizan con una única máquina servidor, por el contrario en sistemas distribuidos como GIT cada una de las máquinas se pueden sincronizar con otras, y a su vez cada una de estas puede ser el repositorio maestro de otras.

Cuando existe un repositorio Git este tiene un repositorio local, el cual puede tener varias versiones de nuestro proyecto, a esto se le conocen como ramas (branches), de esta manera en un proyecto puede haber una rama estable, una de pruebas, una de desarrollo y demás.

¿Por qué?
Si quieres motivos para usar Git aquí los tienes:
  • Es distribuido. Gracias a esto obtienes:
    • Independencia. Tú eres un repositorio, no necesitas ninguna información de ningún otro lugar para ninguna operación. Es decir, no necesitas para nada red.
    • Mejor integración y comunicación en grupos de desarrollo grandes, de esta manera cada desarrollador puede compartir cambios con el resto sin depender de un servidor central.
  • Rapidez: Una de las principales características de Git es la velocidad que tiene para hacer todo lo que hace.
    • Manejo simple e intuitivo de las ramas de desarrollo:
    • Git permite mezclar varias ramas a la vez en una tercera (merge octopus).
    • Git permite mezclar eficientemente ramas que tenían como punto en común es un antiguo padre.
  • Git guarda contenido, más no ficheros, esto permite mayor eficiencia la hora de almacenar cambios pero obliga a que en el repositorio no hayan carpetas vacías (no tiene contenido alguno).
  • Permite trabajar en un punto intermedio entre nuestros ficheros reales y el repositorio, lo cual permite hacer modificaciones y más antes de que los cambios sean replicados.
  • Soporta múltiples protocolos de conexión a la hora de hacer publicación (HTTP, FTP, SSH, rsync).
  • Es compatible con otros sistemas de versiones como CVS y SVN.
  • Podrías pagar  por un servidor exclusivo para un proyecto y este te daría información relevante acerca del ritmo de trabajo, Github
¿Cómo?
A continuación pondré una lista de comando que pueden ser muy útiles.

Inicializar Repositorio
$ git init .
Agregar archivos
$ git add <file>
$ git add .
Actualizar archivos modificados
$ git add -u
Crear revisión inicial | Crear nueva revisión
$ git commit -m "mensaje de revisión"
Listar cambios realizados
$ git status
Listar los cambios del formato de parche
$ git diff
Ver historial de cambios
$ git log
$ git log -nX   #=> muestra las ultimas X revisiones
$ git log --stat --summary
Descartar todos los cambios hechos desde la última revisión
$ git reset --hard
Cargar archivo desde la última revisión
$ git checkout 
Corregir descripcion del último commit
$ git commit --amend
Incluir algo que faltó en la última revisión
$ git reset --soft HEAD^
$ git add arch1 arch2 ...
$ git commit
Crear un clon de un repositorio remoto
$ git clone <url del repositorio>
# por ejemplo
git clone ssh://usuario@mi.servidor.algo/ruta/interna/del/repositorio
Agregar origen remoto
$ git remote add origin <url del repositorio>
Sincronizar cambios con el repositorio remoto
$ git push origin master
Configurar usuario y correo para tener información de los commits
$ git config --global user.email "you@example.com"
$ git config --global user.name "Your Name"
Actualizar repositorio local
$ git pull origin master

Mostrar mensajes a color
$ git config --global color.ui auto
Evitar que nuestro servidor rachase commits externos
! [remote rejected] master -> master (branch is currently checked out)
$ git config receive.denyCurrentBranch ignore


Espero que les sirva de ayuda.

Si te gusto el post
compartelo... :D

No hay comentarios:

Publicar un comentario