Git: ¿Es un buen método para trabajar en equipo

From FdIwiki ELP
Jump to: navigation, search

Git como sistema de control de versiones

Sistemas centralizados y distribuidos

Sistema de control de versiones centralizado
Sistema de control de versiones distribuido

A la hora de utilizar un Sistema de Control de Versiones debemos conocer los dos tipos que existen: centralizados y distribuidos.

En los sistemas de versiones centralizados cada desarrollador es un nodo de trabajo, y todos trabajan sobre un mismo repositorio central. En los sistemas de versiones distribuidos cada desarrollador puede ser tanto un nodo como un repositorio, es decir, cada desarrollador puede tanto contribuir a otros repositorios, como servir de repositorio público sobre el que otros desarrolladores pueden basar su trabajo y contribuir a él.

Subversion vs Git

Como ejemplo de sistema centralizado tenemos a Subversion. Subversion fue creado como alternativa a CVS, otro sistema de control de versiones centralizado, por lo que ofrece las mejores características de CVS y añade algunas mejoras. Aunque es un sistema muy popular tiene también algunos inconvenientes, por ejemplo, la ramificación carece de muchas características que sí tienen otros sistemas como Git o Mercurial. Por supuesto este sistema también tiene sus ventajas, aunque muchas organizaciones de código libre como Rails y PHP se han movido de Subversion a Git en los últimos años.

Por el otro lado tenemos Git, que es un sistema de control de versiones distribuido desarrollado por Linus Torvalds. También hay otros sistemas distribuidos bastante populares como Mercurial o Bazaar, pero vamos a hablar de Git por ser el más popular de los tres.

Las diferencias entre Subversion y Git las podemos ver mucho mejor viendo donde ocurren las operaciones (branch, commit, etc.). En el caso de Git, y del resto de sistemas distribuidos, las operaciones son locales, mientras que en Subversion ocurren en el servidor.

Esto quiere decir que en Git puedo hacer N commits antes de mandar los cambios al servidor, mientras que en Subversion cada commit se hace en el servidor. La principal consecuencia de este hecho es que en Git puedo hacer commits intermedios, sin necesidad de tener una versión “estable”, porque puedo hacer push al final. En Subversion, cuando hago un commit tengo que tener una versión consistente antes de hacer el commit para no romper nada que pueda necesitar alguien más, por lo que los commits en Subversion suelen ser bastante grandes.

Gracias a la emergencia de sitios como GitLab, BitBucket o GitHub, del que hablaremos más tarde, la revisión de código usando Git como sistema de control de versiones se ha vuelto mucho más fácil, y muchas organizaciones nuevas está optando por Git. Algunos sitos web muy grandes, como Twitter o Quora, usan Git. Y de hecho, todo el trabajo open-source que realiza Twitter se encuentra alojado en GitHub. Como dato, en Marzo de 2014 el proyecto Bootstrap de Twitter se convirtió en el repositorio más popular de GitHub con más de 24.000 forks y 67.000 estrellas.

Flujos de trabajo

Centralizado

Centralizado

Por supuesto aunque estemos en un sistema distribuido también podemos trabajar de forma centralizada. De este modo tendremos un repositorio central que guarda el código fuente, y los desarrolladores sincronizan su trabajo con él.

Esto significa que, si dos desarrolladores clonan desde el punto central, y ambos realizan cambios, tan sólo el primero de ellos en enviar sus cambios de vuelta lo podrá hacer limpiamente. El segundo desarrollador deberá fusionar previamente su trabajo con el del primero antes de enviarlo, para evitar sobrescribir los cambios del primero. En el caso de Git esto no es un problema, ya que en el caso de que el segundo desarrollador suba sus cambios sin haberlos fusionado primero, el servidor rechazará estos cambios y avisará al desarrollador de que esta intentando enviar cambios “no directos”, y de que no podrá hacerlo hasta que recupere y fusione los cambios que se han hecho antes.

Con un gestor de integración

Gestor de integraciones

Al permitir múltiples repositorios remotos, en Git es posible tener un flujo de trabajo donde cada desarrollador tenga acceso de escritura a su propio repositorio público y acceso de lectura a los repositorios de todos los demás. Habitualmente, este escenario suele incluir un repositorio canónico, representante "oficial" del proyecto.

La idea de este flujo de trabajo se basa principalmente en clonar un repositorio (público o privado si cumples los requisitos), hacer los cambios procedentes en el proyecto, y finalmente enviar una petición a la persona gestora del proyecto principal, para ver si el propietario de ese repositorio quiere incluir tus cambios en el proyecto “oficial”.

Con GitHub tu puedes hacer fork de su proyecto para incluirlo en tu cuenta, hacer los cambios apropiados y solicitar un pull request para ver si el propietario quiere meter los cambios que has hecho tu en el proyecto “oficial”

Dictador y tenientes

Dictador y tenientes

Es una variante del flujo de trabajo con múltiples repositorios. Se utiliza generalmente en proyectos muy grandes, con cientos de colaboradores. Un ejemplo muy conocido es el del kernel de Linux.

Unos gestores de integración se encargan de partes concretas del repositorio; y se denominan tenientes. Todos los tenientes rinden cuentas a un gestor de integración; conocido como el dictador benevolente. El repositorio del dictador benevolente es el repositorio de referencia, del que recuperan (pull) todos los colaboradores.

GitHub y el trabajo

¿Qué es GitHub?

GitHub es un excelente servicio de alojamiento de repositorios de software, el cual ofrece diferentes ventajas para trabajar en equipo, las cuales contaremos más tarde. GitHub, no solo se utiliza para compartir código, sino que también se comparten otro tipo de documentos como artículos, informes etc.

Github es totalmente gratuito para alojar proyectos open source, siendo estos proyectos de visibilidad pública necesariamente.También hay tarifas en las que puedes comprar repositorios privados.

Características útiles para el trabajo en equipo

  • Un wiki que funciona con gollum, el cual opera con Git para el mantenimiento de las distintas versiones de las páginas.
  • Un sistema de seguimiento de problemas, que al estilo del clásico sistema de tickets, permiten a los miembros de tu equipo (o a cualquier usuario de GitHub si tu repositorio es público) abrir un ticket detallando un problema que tenga con tu software o una sugerencia que desee hacer al mismo.
  • Una herramienta de revisión de código, donde se pueden añadir anotaciones en cualquier punto de un fichero (ej: “Esto es mejor que lo extraigamos a una nueva clase”), y debatir sobre determinados cambios realizados en un commit específico.
  • Un visor de ramas donde se pueden comparar los progresos realizados en las distintas ramas de nuestro repositorio.
  • Funciones de revisiones de cambios en el código: si quieres contribuir en un proyecto de otra persona, puedes hacerle fork a su proyecto para que se copie en tu cuenta. Una vez copiado y realizado los cambios que hayas hecho, puedes hacer una solicitud de pull al dueño original del proyecto. Si este considera que tu código es bueno, puede incorporarlo sencillamente haciendo un merge.

¿Es importante tener una cuenta de GitHub a la hora de buscar un trabajo?

Poseer una cuenta activa de GitHub también puede ayudarnos a la hora en encontrar trabajo, ya que ayuda a evaluar el conocimiento que tenemos. Es el sistema de alojamiento más popular actualmente, con 8 millones de usuarios colaborando en 18.3 millones de repositorios en la actualidad.

Es el servicio elegido por muchos proyectos de software libre como jQuery, reddit, Sparkle, curl, Ruby on Rails, node.js, ClickToFlash, Erlang/OTP, CakePHP, Redis, y otros muchos, en los cuales podemos contribuir. Con un simple vistazo a nuestra cuenta se puede ver que hemos desarrollado y en qué proyectos hemos contribuido y cómo, lo que da una buena idea de lo que sabemos hacer. También proporciona un montón de estadísticas sobre tu actividad, aunque esto es algo que gusta a algunos y a otros no, ya que en cierto modo te puede forzar a que intentes llevar una actividad diaria debido a que todos los usuarios pueden ver cuando haces algo y cuando no.

Además recientemente GitHub abrió su propio banco de trabajo, en que cualquier usuario puede ver ofertas y solicitar GitHub jobs

A pesar de las ventajas que ofrece GitHub también tiene sus inconvenientes. Por ejemplo, GitHub no permite personalizar tu página principal de ninguna manera, y los primeros proyectos que se muestran siempre son los que han conseguido mayor cantidad de estrellas y en los que has contribuido recientemente, que no tienen porque ser específicamente los proyectos más importantes para ti o a los que quieras dar mayor relevancia.

Por ello se recomienda no sólo tener una buena cuenta de GitHub, sino también complementarla con un buen portfolio donde expongas tus mejores trabajos, tanto profesionales como personales, de manera detallada. Mostrando exactamente lo que quieres mostrar de forma ordenada y según la relevancia que tú quieras darle.


Puff ¿Cómo iniciar en el mundo de Git?

learnGitBranching

Teniendo en cuenta que Git hoy en día es el repositorio de código más utilizado a nivel mundial, incluso los desarrolladores de IDE lo han incluido en alguna plataforma, y por este motivo para ciertos proyectos estaremos obligados a utilizarlos. También en cierto que muchos no están acostumbrados al uso de la consola por ello cuesta iniciar con Git, pero por suerte existe una herramienta llamada learnGitBranching que te permitirá iniciar con Git mediante una serie de tutoriales y diversos retos, podrás aprender cosas hacer un “git commit”, jugar con ramas, el uso de rebase y de “cherry-pick”, entre muchas cosas mas. Este sistema consta de un emulador de consola Git en el cual podrás introducir comandos del repositorio. Además incluye un completo tutorial que explica lo que significa cada comando y en qué tipos situaciones aplicarlo, eso no es todo ya que podrás ir visualizando, en un gráfica animada, en todo momento lo que va pasando con el flujo de trabajo desencadenado con cada línea de comando. Así que si eres uno de los que quieren inicial con Git y no sabe por donde empezar esta puede ser la herramienta que te permita poder introducirte en el magnífico mundo de Git, suerte y adelante !!.

Enlaces Internos

Enlaces Externos

Sitio oficial de Subversion

Sitio oficial de Git

Sitio oficial de GitHub

Comparación de algunos de los distintos Sistemas de Control de Versiones

Comparación de algunos de los distintos Sistemas de Alojamiento

Artículo sobre GitHub: “¿Porque Github no es tu CV?”

Artículo: “Cómo GitHub está cambiando la manera en la que contratamos”

"Git:¿Es un buen método para trabajar en equipo?"