Skip to content
This repository has been archived by the owner on Aug 13, 2020. It is now read-only.

Tutorial paso a paso: contribuyendo a un pull request

Juan Luis Cano Rodríguez edited this page Mar 30, 2016 · 5 revisions

Situación.

Según está definido en el flujo de trabajo, todas las nuevas implementaciones deben realizarse sobre ramas nuevas en forks del repositorio principal de aeropython. En algunas ocasiones, bien porque queremos hacer contribuciones o cambios a una rama que está en proceso de pull request, o bien porque queremos utilizarla como base para la implementación de una nueva funcionalidad que no está todavía incluida en la rama master, necesitamos acceder a estas ramas desde nuestro repositorio local.

En esta página se describe el proceso a seguir en ambos casos sobre un ejemplo práctico:

La rama olrosales:input_generator se encuentra en proceso de revisión, el pull-request no se ha completado y no se ha integrado todavía en la rama AeroPython:master. El objetivo es: primero hacerla accesible desde nuestro ordenador y después realizar una serie de modificaciones y pedir al propietario, en este caso olrosales, que los integre para que pasen a formar parte del pull request original.

Haciendo la rama visible.

Partiendo de que ya se ha hecho un fork y un clonede PyFME (más info aquí, de modo que el repositorio está disponible en nuestro equipo, el siguiente paso es añadir y actualizar el fork del usuario cuya rama quieres modificar, en este caso:

$ git remote add upstream git@github.com:AeroPython/PyFME.git
$ git fetch upstream-oscar
remote: Counting objects: 64, done.
remote: Total 64 (delta 23), reused 23 (delta 23), pack-reused 41
Unpacking objects: 100% (64/64), done.
From github.com:olrosales/PyFME
 * [new branch]      input_generator -> upstream-oscar/input_generator
 * [new branch]      master     -> upstream-oscar/master

Creando una rama a partir de una rama remota.

Una vez que la rama es visible desde nuestro ordenador, lo que haremos es crear una rama nueva tomando como origen la rama remota:

$ git checkout -b input_generator_contribution upstream-oscar/input_generator 
Branch input_generator_contribution set up to track remote branch input_generator from upstream-oscar.
Switched to a new branch 'input_generator_contribution'
$ git branch -v
* input_generator_contribution 839975e Added changes in input_generator
  master                       d52c33e Merge pull request #48 from JuanMatSa/tascaseas

A partir de este momento podemos hacer las modificaciones que queramos en la rama input_generator_contribution. Estos cambios, pueden querer integrarse en la rama desde la que habíamos partido: upstream-oscar/input_generator o directamente en AeroPython:master. Veremos aquí el primer caso ya que el primero está explicado aquí. Éste es sólo una ligera modificación.

Haciendo los cambios, subiéndolos y haciendo el pull request.

Una vez hechas las modificaciones (con sus commits) se procede a subir los cambios a nuestro repositorio personal remoto:

$ git push origin input_generator_contribution 

y desde www.github.com/tu-usuario/PyFME haremos el pull request como está explicado en: https://github.com/AeroPython/PyFME/wiki/Tutorial-paso-a-paso-del-flujo-de-trabajo#creando-un-pull-request.

IMPORTANTE:

  • Se debe fijar como base fork el repositorio del que partiste: en este caso olrosales/PyFME
  • como base, la rama de ese repositorio: input_generator
  • como head fork tu repositorio y como compare: input_generator_contribution

Aceptando el pull request y actualizando repositorio local.

Una vez el colaborador ha solicitado el pull request y consideras que los cambios están para ser agregados, en la pestaña Pull Request, aceptas y confirmas el merge.

Ahora los cambios están en tu repositorio remoto, pero para poder seguir trabajando debes poner al día tu repositorio local. Para ello:

$ git checkout rama_correcta    # Nos situamos en la rama concreta en la que estamos trabajando
$ git checkout -- .             # Limpiamos los cambios locales, en el caso de que los haya
$ git branch -u origin/rama     # En caso de que la rama local aún no siga a la remota.
& git fetch origin              # Actualizamos los cambios
& git merge --ff-only origin/rama # Bajamos los cambios a nuestro repositorio local