Comunidad de diseño web y desarrollo en internet online

Cómo colaborar en un proyecto en GitHub

GitHub es la red social más grande de programadores, donde se encuentran hospedados gran parte de los proyectos de software libre y código abierto, por lo tanto es necesario saber como actuar para realizar colaboraciones tanto a proyectos de programación, como a otros tipos de proyectos.

En esta guía me limitaré solo a un proyecto de programación, pero el proceso sería casi similar para otros tipos de proyectos.



Para comenzar hay que tener listo nuestro entorno con Git, y seleccionar el proyecto al cual deseamos hacer un aporte, en mi caso seleccioné MongoEngine un ODM de MongoDB para Python.

Fork del repositorio


El primer paso de todo este proceso es "forkear" el repositorio, vamos a la dirección del repositorio.



Presionamos el botón Fork.



Y ya tenemos el repositorio en nuestra cuenta.



Esto lo realizamos, porque la mayoría de las veces no tenemos permiso directo a los repositorios de los proyectos, por lo tanto debemos trabajar en un fork del repositorio para luego enviar los cambios al repositorio original.

Empecemos a trabajar!

Clonar el repositorio


Luego de tener el repositorio en nuestra cuenta, seleccionamos la dirección SSH del repositorio y lo clonamos con las herramientas de Git.



Código :

$ git clone [email protected]:yograterol/mongoengine.git


Nos vamos a la carpeta que se genera, en este caso mongoengine y verificamos la URL del repositorio.

Código :

$ cd mongoengine
$ git remote -v
origin   [email protected]:yograterol/mongoengine.git (fetch)
origin   [email protected]:yograterol/mongoengine.git (push)


Al ingresar a la carpeta nos encontramos en la rama master, es importante mencionar que se recomienda no hacer los cambios en la rama master, sino utilizar otras ramas, para comodidad y evitar perder otros cambios; el master se mantendrá solo para recuperar los últimos cambios del repositorio original.

Otra cosa que debemos hacer antes de realizar modificaciones es agregar la URL del repositorio original del proyecto, que si no tienes permiso entonces será de solo lectura.

Código :

$ git remote add upstream https://github.com/MongoEngine/mongoengine.git


Verificamos.

Código :

$ git remote -v
origin   [email protected]:yograterol/mongoengine.git (fetch)
origin   [email protected]:yograterol/mongoengine.git (push)
upstream   https://github.com/MongoEngine/mongoengine.git (fetch)
upstream   https://github.com/MongoEngine/mongoengine.git (push)


Actualizar la rama master


Como la utilidad de nuestra rama master es mantener todos los cambios del repositorio original, debemos actualizarla antes de comenzar a trabajar, así tendremos los cambios que se hagan a último minuto.

Ejecutamos:

Código :

$ git pull -r upstream master


Crear una rama


Se recomienda siempre hacer una rama desde master para realizar cambios y proponer su inclusión en el repositorio oficial.

Para crear una rama usamos la opción checkout de git.

Código :

git checkout -b feature-progressive-jpeg


Mi ejemplo lo baso en un problema reportado en GitHub para el almacenamiento de imágenes JPEG, por lo tanto llamo la rama con un nombre similar para lo que deseo hacer, esta no es una regla, solo lo uso para mantener un orden.

Codeando


En este paso realizamos todos los cambios que se desea hacer al proyecto, y verificamos con git status los archivos que hemos modificados.

Código :

$ git status
# On branch feature-progressive-jpeg
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   mongoengine/fields.py
#
no changes added to commit (use "git add" and/or "git commit -a")


Agregamos los archivos y hacemos un commit. Lo normal es ejecutar dos comandos.

Código :

$ git add .
$ git commit -m "mensaje" 


Pero si te gusta ahorrar caracteres, usa git commit -a -m "Mensaje", de esa manera agregas los archivos modificados y realizas el commit. Algo importante, el mensaje que uno coloque debe ser lo más descriptivo posible; NO colocar algo como "Cambio de archivo" o "Modificación simple", en este tipo de proyectos exigen ser detallados.

En mi caso este es mi commit.

Código :

$ git commit -a -m "Feature for progressive JPEG. Issue #486"
[feature-progressive-jpeg 341e1e7] Feature for progressive JPEG. Issue #486
 1 file changed, 14 insertions(+), 4 deletions(-)


Después de realizar el commit uno debe hacer el push hacia nuestro repositorio indicando la URL de nuestro repositorio y la rama que hemos trabajado.

Código :

$ git push origin feature-progressive-jpeg
Counting objects: 7, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 578 bytes | 0 bytes/s, done.
Total 4 (delta 3), reused 0 (delta 0)
To [email protected]:yograterol/mongoengine.git
 * [new branch]      feature-progressive-jpeg -> feature-progressive-jpeg


Revisamos nuestro repositorio en GitHub y este es el resultado:



Hacer un Pull Request


El último paso para que nuestro aporte se haga efectivo en el repositorio es enviar un Pull Request y esperar a que el encargado del repositorio lo revise, acepte y mezcle en la rama correspondiente a la versión del software.



Hacemos click en "Compare & Pull Request", nos llevará a otra página donde podremos detallar nuestro Pull Request.



Si todo está bien, realizamos el envío con el botón "Send Pull Request".

Y felizmente veremos lo siguiente. :D



Algunos de estos pasos pueden variar según el proyecto con el cual se trabaje.

¿Sabes SQL? ¿No-SQL? Aprende MySQL, PostgreSQL, MongoDB, Redis y más con el Curso Profesional de Bases de Datos que empieza el martes, en vivo.

Publica tu comentario

El autor de este artículo ha cerrado los comentarios. Si tienes preguntas o comentarios, puedes hacerlos en el foro

Entra al foro y participa en la discusión

o puedes...

¿Estás registrado en Cristalab y quieres
publicar tu URL y avatar?

¿No estás registrado aún pero quieres hacerlo antes de publicar tu comentario?

Registrate