Introducción a GIT.

Que es Git?

GIT es un software de control de versiones diseñando por Linus Torvalds ampliamente utilizado en el mundo del desarrollo de software. Este es un sistema distribuido de control de versiones con énfasis en velocidad, eficiencia y confiabilidad en el mantenimiento de versiones de aplicaciones sobre todo cuando estas poseen un gran número de archivos de código fuente.

GIT es fácil de aprender y tiene una curva de aprendizaje relativamente baja, con un rendimiento increíblemente rápido y supera a herramientas de SCM como Subversion, CVS, Perforce y ClearCase con características como excelente ramificaciones locales, áreas de almacenamiento convenientes y múltiples flujos de trabajo.

Características:
  • Fuerte apoyo al desarrollo no lineal, por ende rapidez en la gestión de ramas y mezclado de diferentes versiones. Git incluye herramientas específicas para navegar y visualizar un historial de desarrollo no lineal. Una presunción fundamental en Git es que un cambio será fusionado mucho más frecuentemente de lo que se escribe originalmente, conforme se pasa entre varios programadores que lo revisan.

  • Gestión distribuida. Al igual que Darcs, BitKeeper, Mercurial, SVK, Bazaar y Monotone, Git le da a cada programador una copia local del historial del desarrollo entero, y los cambios se propagan entre los repositorios locales. Los cambios se importan como ramas adicionales y pueden ser fusionados en la misma manera que se hace con la rama local.

  • Los repositorios pueden publicarse por HTTP, FTP, rsync o mediante un protocolo nativo, ya sea a través de una conexión TCP/IP simple o a través de cifrado SSH. Git también puede emular servidores CVS, lo que habilita el uso de clientes CVS preexistentes y módulos IDE para CVS preexistentes en el acceso de repositorios Git.

  • Los repositorios Subversion y svn se pueden usar directamente con git-svn.

  • Gestión eficiente de proyectos grandes, dada la rapidez de gestión de diferencias entre archivos, entre otras mejoras de optimización de velocidad de ejecución.

  • Todas las versiones previas a un cambio determinado, implican la notificación de un cambio posterior en cualquiera de ellas a ese cambio (denominado autenticación criptográfica de historial). Esto existía en Monotone.

  • Resulta algo más caro trabajar con ficheros concretos frente a proyectos, eso diferencia el trabajo frente a CVS, que trabaja con base en cambios de fichero, pero mejora el trabajo con afectaciones de código que concurren en operaciones similares en varios archivos.

  • Los renombrados se trabajan basándose en similitudes entre ficheros, aparte de nombres de ficheros, pero no se hacen marcas explícitas de cambios de nombre con base en supuestos nombres únicos de nodos de sistema de ficheros, lo que evita posibles, y posiblemente desastrosas, coincidencias de ficheros diferentes en un único nombre.

  • Realmacenamiento periódico en paquetes (ficheros). Esto es relativamente eficiente para escritura de cambios y relativamente ineficiente para lectura si el reempaquetado (con base en diferencias) no ocurre cada cierto tiempo.

  • Codigo abierto y Gratuito.

Buenas Prácticas:

Cada desarrollador o equipo de desarrollo puede hacer uso de Git de la forma que le parezca conveniente. Sin embargo una buena práctica es la siguiente:

Se deben utilizar 4 tipos de ramas: Master, Development, Features, y Hotfix.

  • Master:

Es la rama principal. Contiene el repositorio que se encuentra publicado en producción, por lo que debe estar siempre estable.

  • Development:

Es una rama sacada de master. Es la rama de integración, todas las nuevas funcionalidades se deben integrar en esta rama. Luego que se realice la integración y se corrijan los errores (en caso de haber alguno), es decir que la rama se encuentre estable, se puede hacer un merge de development sobre la rama master.

  • Features:

Cada nueva funcionalidad se debe realizar en una rama nueva, específica para esa funcionalidad. Estas se deben sacar de development. Una vez que la funcionalidad esté lista, se hace un merge de la rama sobre development, donde se integrará con las demás funcionalidades.

  • Hotfix:

Son bugs que surgen en producción, por lo que se deben arreglar y publicar de forma urgente. Es por ello, que son ramas sacadas de master. Una vez corregido el error, se debe hacer un merge de la rama sobre master. Al final, para que no quede desactualizada, se debe realizar el merge de master sobre development.

Instalación de Git
Instalación en Windows
  1. Abre cualquier navegador y accede a la siguiente dirección: http://msysgit.github.com
  2. Entra en la sección Downloads y descarga la versión más reciente que exista.
  3. Instala el archivo .exe descargado como cualquier otra aplicación de Windows.
Instalación en Linux

Ejecuta el siguiente comando:

# en distribuciones Fedora, RedHat y CentOS:
  yum install git-core

 # en distribuciones Debian y Ubuntu:
   apt-get install git-core
Instalación en Mac OS X
  1. Abre cualquier navegador y accede a la siguiente dirección: http://git-scm.com
  2. Descarga la versión más reciente que veas en la propia portada de ese sitio web.
  3. Instala el archivo .dmg descargado como cualquier otra aplicación de Mac.

Otro método de instalación en MacOS es usando HomeBrew que es mi favorito. Solo tienes que ejecutar el comando:

brew install git  

Para verificar que todo ha ido bien con la instalación, sin importar tu sistema operativo, te recomendamos abrir la shell, terminal o command prompt y ejecutar el comando:

git  

Si todo ha ido bien, deberías de ver un resultado parecido al siguiente:

usage: git [--version] [--exec-path[=<path>]] [--html-path] [--man-path]  
           [--info-path] [-p|--paginate|--no-pager] [--no-replace-objects]
           [--bare] [--git-dir=<path>] [--work-tree=<path>]
           [--namespace=<name>] [-c name=value] [--help]
           <command> [<args>]

The most commonly used git commands are:  
   add        Add file contents to the index
   bisect     Find by binary search the change that introduced a bug
   branch     List, create, or delete branches
   checkout   Checkout a branch or paths to the working tree
   clone      Clone a repository into a new directory
   commit     Record changes to the repository
   diff       Show changes between commits, commit and working tree, etc
   ...

Te recomendamos completar el tutorial en linea con Try Git.

Déjanos tus comentarios sobre tu experiencia.