FerPerales

FerPerales

Publicado
Agosto 9, 2013

Próximos Eventos

Blog

Flujo colaborativo de trabajo con Git y Github

Probablemente ya hemos escuchado acerca de Git y de cómo se ha ido convirtiendo en el sistema de control de versiones favorito entre las empresas de TI ya que hace que el trabajar en equipo sea relativamente fácil gracias a los comandos que nos proporciona.

Dependiendo de las características del proyecto, pueden presentarse algunas de estas opciones:

  • Repositorio público al que no tienes acceso para empujar código
  • Repositorio privado al que tienes acceso

En este post, vamos a dar un vistazo al primer flujo

Repositorio público al que no tienes acceso para empujar código

La mayoría de aportaciones a open source entran en este caso: existen un proyecto en Github y quieres mandar alguna propuesta de mejora, agregar una nueva funcionalidad o corregir un bug pero no tienes acceso al repositorio para clonarlo y empujar directamente los cambios.

Fork

Lo primero que debemos hacer es hacer una copia del repositorio a nuestra cuenta A esto se le conoce en Github como hacer un 'fork' y se hace desde la interfaz de Github

image alt

Esto hará que el repositorio se copie a nuestra cuenta conservando el mismo nombre y agregando el origen del repositorio.

image alt

Clonamos el repositorio a nuestra máquina usando el siguiente comando:

git clone git@github.com:TU_NOMBRE_DE_USUARIO/NOMBRE_DEL_REPO.git

image alt

Siempre es conveniente revisar en el repositorio si hay reglas para realizar las contribuciones. Estas reglas pueden incluir desde seguir ciertas convenciones de nombres para las ramas creadas o para los commits, que la nueva funcionalidad tenga pruebas (que es bastante recomendable aunque no sea requerido) o alguna otra regla que el autor del código original considere necesaria. Si no nos apegamos a esas reglas, es muy probable que nuestro pull request sea rechazado.

Considerando que no hay alguna regla especial para este ejemplo, procedemos a trabajar:

Una vez que tienes tu copia local, es hora de realizar una nueva rama para nuestros cambios.

git checkout -b nombre-de-la-rama

Estando en la nueva rama, podemos trabajar libremente en nuestro código.

Una vez que hemos terminado de hacer los cambios correspondientes, es hora de subir nuestra rama a Github.

git push origin nombre-de-la-rama

Ahora nuestra rama aparecerá en nuestro repositorio junto a las otras ramas que el proyecto pueda tener.

image alt

Pull Request

Ya que tenemos nuestra rama en nuestro repositorio en Github, es hora de integrarla con el repositorio original para lo que tenemos que hacer un Pull Request. Un Pull Request (comúnmente abreviado como PR) es la manera en que solicitamos agregar los commits realizados en una rama a otra.

Para esto, vamos al repositorio original y buscamos el botón de 'Compare and Pull Request'.

image alt

En esta sección, podemos ver tres partes principales:

  • Ramas involucradas

Indica el repositorio y la rama que queremos comparar así como el nombre de la rama base con la que se realizará la comparación. Si alguna de las ramas no fuera la deseada, podemos seleccionar otra en esta sección.

image alt

La segunda parte sirve para agregar comentarios respecto al PR que haremos así como si este podrá ser integrado sin conflictos con la rama base.

image alt

Por último, tenemos una sección que nos muestra tanto los archivos como los cambios realizados a los mismos para dar un vistazo antes de realizar el PR.

image alt

Finalizando

Una vez que verifiquemos que todo está en orden, procedemos a crear el pull request.

image alt

Lo que sigue es esperar a que el código que enviamos sea revisado ya que es probable que alguien deba revisar el código y tenga dudas o sugerencias al respecto del mismo o que tu PR sea rechazado por alguna razón.

image alt

Nuestro final feliz llegará el día en que nuestro código sea integrado en el proyecto original.

image alt

Conclusiones

Como comenté al inicio de la entrada, este flujo es el más común para realizar contribuciones a proyectos de open source.

Fernando Perales,es Ingeniero en Crowd Interactive.