Skip to content

Manual de Git para trabajar con el proyecto de Spreads

Sufrostico edited this page Oct 1, 2014 · 20 revisions

Instalar y configurar el gitflow

Basado en este post de Vincent Driessen, Git-flow es una herramienta que facilita un flujo de trabajo que se puede utilizar trabajando con git.

El proyecto lleva algún tiempo sin actividad, pero Peter van der does, realizó un fork de git-flow y es el que tiene mayor mantenimiento en la actualidad.

La versión actual del paquete es la 1.7.0 y se puede instalar en Debian GNU/linux con el siguiente comando: apt-get install git-flow

Configurar el proyecto para estar listo para actualizar.

Esto queda más claro en la sección de Ejemplo de trabajo con git flow.

Pero si quiere investigar más: Configure git to sync your fork with the original

Ejemplo de trabajo con git flow

  1. Se clona el repositorio

    $ git clone [email protected]:Sufrostico/spreads.git
    Cloning into 'spreads'...
    Enter passphrase for key '/home/sufrostico/.ssh/id_rsa':
    remote: Counting objects: 6498, done.
    remote: Compressing objects: 100% (1859/1859), done.
    Receiving objects: 100% (6498/6498), 20.86 MiB | 437.00 KiB/s, done.
    Resolving deltas: 100% (4614/4614), done.
    Checking connectivity... done.
  2. Me paso a la carpeta del repo

    $ cd spreads
  3. Se muestran las ramas/branch remotos

    $ git remote -v
    origin  [email protected]:Sufrostico/spreads.git (fetch)
    origin  [email protected]:Sufrostico/spreads.git (push)
  4. Se agrega la rama/branch remota para el repo principal

    $ git remote add upstream [email protected]:LabExperimental-SIUA/spreads.git
  5. Se muestran las ramas/branch remotos

    $ git remote -v
    origin  [email protected]:Sufrostico/spreads.git (fetch)
    origin  [email protected]:Sufrostico/spreads.git (push)
    upstream        [email protected]:LabExperimental-SIUA/spreads.git (fetch)
    upstream        [email protected]:LabExperimental-SIUA/spreads.git (push)
  6. Se inicializa git-flow

    $ git flow init
    Which branch should be used for bringing forth production releases?
       - master
    Branch name for production releases: [master]
    Branch name for "next release" development: [develop] next
    How to name your supporting branch prefixes?
    Feature branches? [feature/] issue-
    Release branches? [release/]
    Hotfix branches? [hotfix/]
    Support branches? [support/]
    Version tag prefix? [] version-
    Hooks and filters directory? [.git/hooks]
  7. Inicializo un feature (El # corresponde al # de issue en github)

    $ git flow feature start 62
    Switched to a new branch 'issue-62'
    Summary of actions:
    - A new branch 'issue-62' was created, based on 'next'
    - You are now on branch 'issue-62'
    Now, start committing on your feature. When done, use:
    git flow feature finish 62
  8. Hago cambios en el código

    $ vim spreadsplug/gui/gui.py
  9. Agrego los cambios al índice

    $ git add spreadsplug/gui/gui.py
  10. Le hago commit a los cambios

    $ git commit -m "Cambios en el plugin de la GUI"
    [issue-62 a978f82] Cambios en el plugin de la GUI
     1 file changed, 2 insertions(+)
  11. Envio la rama a github en caso de que no haya terminado

    $ git flow feature publish 62
  12. Hago más cambios en el código

    $ vim spreadsplug/gui/gui.py
  13. Los agrego al índice

    $ git add spreadsplug/gui/gui.py
  14. Hago commit de los cambios

    $ git commit -m "Cambios finales en el plugin de la GUI"
    [issue-62 a978f82] Cambios finales en el plugin de la GUI
     1 file changed, 25 insertions(+)
  15. Despupes de hacer las pruebas, si ya terminé con el issue, le doy terminar al feature

    $ git flow feature finish 62
    Switched to branch 'next'
    Merge made by the 'recursive' strategy.
     spreadsplug/gui/gui.py | 27
     1 files changed, 27 insertions(+), 0 deletions(-)
     create mode 100644 spreadsplug/gui/gui.py
    Deleted branch issue-62 (was 5977194).
    Summary of actions:
    - The feature branch 'issue-62' was merged into 'next'
    - Feature branch 'issue-62' has been locally deleted
    - You are now on branch 'next'
  16. Envío los cambios a github

    $git push
  17. Desde el sitio de github hago un pull request.

Cómo actualizar nuestro fork con las cosas nuevas del original.

  1. Me paso a la rama/branch master

    $ git checkout master
  2. Me traigo los cambios del original

    $ git fetch upstream
    remote: Counting objects: 75, done.
    remote: Compressing objects: 100% (53/53), done.
    remote: Total 62 (delta 27), reused 44 (delta 9)
    Unpacking objects: 100% (62/62), done.
    From https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY
     * [new branch]      master     -> upstream/master
  3. Integro los cambios que me traje con lo que tengo en el repo

    $ git merge upstream/master
    Updating a422352..5fdff0f
    Fast-forward
     README                    |    9 -------
     README.md                 |    7 ++++++
     2 files changed, 7 insertions(+), 9 deletions(-)
     delete mode 100644 README
     create mode 100644 README.md

Para más información ver: Process to sync a fork

Números de versión (tags/etiquetas)

Cáda vez que se acepta que el código esta lo suficientemente estable se puede hacer un release, para esto se utilizan las etiquetas/tags de GIT.

Branches por repositorio

Al final los repositorios deberían tener más o menos esta estructura de ramas/branches

DIYBookScanner/spreads
   └─ master
LabExperimental-SIUA/spreads
   ├─ master
   └─ next
\<usuario>/spreads
   ├─ master
   ├─ next
   ├─ issue-#
   ├─ ...
   └─ issue-#

Resumen:

El flujo debería ser más o menos así:

Github + gitflow