Proyectos colaborativos con Git

Introducción a GIT

La semana pasada tuve la oportunidad de acudir a una charla organizada por el grupo de meetup sobre metodologías y herramientas de gestión de proyectos, Gestión de Proyectos Sevilla (geprosev), en la que se hizo una pequeña introducción sobre Git a cargo de Arantza Respaldiza, continuando posteriormente con un enfoque sobre por qué usar esta herramienta en la gestión de proyectos, a cargo de Iñaki Respaldiza.

Arantza Respaldiza

Introducción a Git

La sesión comenzó con unas nociones básicas sobre Git, con un toque un tanto personal, que pudimos apreciar en las recomendaciones y aportaciones que la propia Arantza nos hizo. Destacando la confianza que en este sistema de control de versiones tenía, por la garantía que le ofrecía el que fuera creado por nada menos que el creador de Linux, Linus Torvalds.

Cabe destacar como principales líneas: el área de trabajo, el área de preparación, así como el repositorio de Git. Dónde podemos encontrar una característica principal de Git y es la dualidad de repositorio. No sólo tienes un repositorio principal, genérico al que todo el mundo ataca, sino que cada máquina puede ser un repositorio en sí mismo. Con esto lo que nos quiere decir Arantza es que en nuestra máquina tendremos nuestra copia del repositorio de manera local, mientras que podremos tener otra copia, que puede ser compartida por más usuarios, de manera remota. De esta forma al final lo que tenemos es una comunicación repo a repo.

Además nos estuvo comentando los tres estado principales de los archivos en el sistema de control de versiones Git, que son:

  • Confirmado (commited): destinado a la creación de una versión segura del archivo.
  • Modificado (modified): representación de una versión cambiada del archivo.
  • Preparado: correspondiendo a la versión actual del archivo para ser confirmado.

En adición a lo anterior nos estuvo explicando como instalarnos Git en los principales sistemas operativos. Haciendo un repaso sobre los comandos más usados para trabajar con esta potente herramienta y nos comentó un poco sobre el sistema de creación de ramas (branching). Además nos recomendó algunos entornos gráficos para Mac, ya que es el sistema operativo donde suele trabajar, así como un poco de experiencia personal con esta herramienta.

Experiencia gestionando proyectos colaborativos con git

Tras esta primera charla, tuvimos la oportunidad de atender en mayor profundidad y desde el punto de vista de la experiencia de un usuario más que avanzado de Git, como es Iñaki Respaldiza, cómo podemos participar/colaborar con un proyecto de software libre, y cómo este tipo de proyectos llevan la gestión de sus productos mediante la creación de código de manera colaborativa con Git.

Iñaki Respaldiza

Experiencia gestionando proyectos colaborativos con git

Iñaki nos estuvo dando una serie de motivos para usar git en la gestión de proyectos, tales como:

  • Compartición selectiva, se puede realizar un push remoto o local cuando quieras con lo que quieras.
  • Velocidad
  • Ramificación, una de las ventajas es la utilización de “SandBox”, ramas de pruebas en las que realizar un desarrollo experimental sin tener la necesidad de tener que ser integradas en la versión principal de desarrollo.
  • Convergencia del código, haciendo que los merges (mezclas de código) sean mucho más limpios.cto de
  • Control del flujo de trabajo, ya que se sabe quien realiza cambios a qué, además de tener la oportunidad de crear versiones.
  • Es un buen sistema de backup.

Además nos estuvo comentando como uno de los uso de git es la utilización para la creación de distintas versiones de imágenes, ya que permite una fácil modificación de las mismas, mediante los distintos workflow que se pueden establecer:

Fork – Clone – Modificas la imagen – Commit – Push

La forma en la que comenzó a usar git fue para realizar commits al repositorio de Docker, implicándose de esta forma en un proyecto de Software Libre, haciendo entender todo el flujo de trabajo que para este tipo de proyectos se empleaba.

Para comprender la gestión de proyectos hay que tener en cuenta una serie de aspectos como por ejemplo, dónde guardarlo. Para lo que Iñaki nos propone varias alternativas,:

  • De manera remota: Github, Bitbucket o GitLab
  • De manera local: en una carpeta compartida en una red local

Esto hace destacar otra de las ventajas de Git frente a otros sistemas de control de versiones, y es que en cualquier carpeta donde inicies esta herramienta se convertirá en un repositorio local de git.

No sólo nos habló sobre dónde almacenar nuestras distintas versiones de ficheros, sino que también nos dio unas nociones de los principales modelos de gestión de proyectos, de los que cabe destacar:

Centralized Workflow

En el que hay un repo principal compartido al que se se conectan un número determinado de desarrolladores.

Shared Repository

Integration-Manager Workflow

En el que hay un repo principal al que sólo puede subir código un Integration Manager, encargado de mergear todo el código que los propios desarrolladores le envían. Teniendo en cuenta que éstos si que se pueden traer los distintos cambios que el IM haya integrado en el repo principal.

Blessed Repository

Dictator and Lieutenants Workflow

En el que destaca la figura del dictador encargado de aceptar lo que se puede o no subir a la versión principal a partir de la mezcla de código de distintos IM. En este todos los desarrolladores tienen acceso a todos sus niveles superiores. Este flujo de trabajo es muy típico en proyectos de Software Libre.

Hasta aquí llegó la explicación de Iñaki, con la que pudimos disfrutar no sólo de git, sino de encontrar unos cuantos motivos que hacen que te plantees el por qué no lo estás usando ya.

Muchas gracias a ambos por hacernos disfrutar de tan apasionante mundo, así como por la paciencia de responder a preguntas y generar debate, que al fin y al cabo es para lo que se viene, para debatir, compartir y sobre todo aprender.

Muchas gracias como no a Emergya, por permitir albergar una vez más en sus instalaciones tan productivos encuentros que hacen que te sientas en comunidad.