Git, git branch, y como trabajar con diversas ramas?(Es una pregunta pero de estos lodos podemos sacar unos cuencos preciosos).

Events happening in the community are now at Drupal community events on www.drupal.org.
oskar_calvo's picture

Lo primero la documentación que estoy siguiendo para intentar montar esto bien, y terminar de aclararme un poco.

La idea en la empesa en la que estoy trabajando es pasar a un sistema de repositorio unificado y varias ramas,como cuenta aquí: http://nvie.com/posts/a-successful-git-branching-model/
Tambiń tenemos como textos que nos ayudan:
* http://www.genbetadev.com/sistemas-de-control-de-versiones/stashing-con-git
* http://www.genbetadev.com/herramientas/manejo-de-ramas-de-desarrollo-con...
* http://www.genbetadev.com/sistemas-de-control-de-versiones/tags-con-git

Siguente siempre nvie.com como documentación central hemos creado las tres ramas, la master para explotación, y staging y devel-0.1

si usamos la herramienta gitg (Linux) para ver las ramas del arbol, vemos como se van pintando y rellenando con los commits.

Para la configuración del repositorio tenemos:

[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
[remote "origin"]
        fetch = +refs/heads/:refs/remotes/origin/
        url = gitolite@xxx.xxx.xxx:repositori.git
[branch "master"]
        remote = origin
        merge = refs/heads/master
[branch "devel-0.1"]
        remote = origin
        merge = refs/heads/devel-0.1
[branch "staging"]
        remote = origin
        merge = refs/heads/staging

El caso es que cada vez que hago un push me dice:

To gitolite@xxx.xxx.xxx:repositorio.git
! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'gitolite@xxx.xxx.xxx:repositorio.git'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes (e.g. 'git pull') before pushing again.  See the
'Note about fast-forwards' section of 'git push --help' for details.

No entiendo porque ocurre esto,un poco de luz se agradecería.

Oskar

Comments

Que bien Oskar que compartas

tuwebo's picture

Que bien Oskar que compartas esto... yo estoy empezando con el libro que se puede bajar uno gratuitamente aquí:

http://book.git-scm.com/

Ahora eso si, fácil fácil no es!

Aguskii. Estoy compartiendo

oskar_calvo's picture

Aguskii.

Estoy compartiendo dudas y preguntas, a ver si las resolvemos y pondemos montar una página wiki.

Oskar

Haz pull

juampynr's picture

Alguien ha realizado cambios en la rama master. Debes hacer git pull antes de enviar tus commits.

Si el comando que lanzaste fue 'git push' en vez de 'git push origin master', puede que los cambios se hayan realizado en alguna otra de las ramas.

Respecto al workflow que comentas, se consolidó en una extensión de git que incorpora mediante comandos sencillos las acciones que en el documento se explican: https://github.com/nvie/gitflow. Si lo pruebas avísame ya que tiene buenísima pinta y yo todavía no lo he puesto en práctica.

Saludos

Senior Developer at Lullabot
https://www.lullabot.com/who-we-are/juampy-nr

Gracias Juampy. Mañana nos

oskar_calvo's picture

Gracias Juampy.

Mañana nos meteremos a saco con el tema, curiosamente hemos ejecutado los comandos sin tener gitflow instalado y nos ha dado problemas ninguno. Quizás la diferencia es el working three que al hacer el merge entre devel y staging, devel desaparecía para volver a tener que regenerarlo después.

Entiendo que el tema de la configuración del config del repositorio esta correctamente, no?

Oskar

La cosa va funcionando muy

oskar_calvo's picture

La cosa va funcionando muy bien.

Únicamente, con la configuración que he puesto arriba cuando hacemos un push de devel me dice que ha subido a la vez devel y master, pero si hago
git push origin devel no me dice nada.

Cosas de git supongo.

Oskar

Correcto

juampynr's picture

Si haces git push, se hace un push de todas las ramas que tengan nuevos commits. Si el push no devuelve nada, es que no hay nada nuevo que subir, independientemente de que hayas especificado la rama en el push o no.

Senior Developer at Lullabot
https://www.lullabot.com/who-we-are/juampy-nr

Pero si haces un git push y

pcambra's picture

Pero si haces un git push y no hay nada que subir te debería decir algo así como already up to date no?

Con respecto al pull, hay que tener ojo porque hace merge automáticamente, (pull = fetch+merge) y te puede dejar los logs de las ramas echas un cristo y llenas de merge innecesarios, personalmente me gusta mucho más la estrategia de git pull --rebase, que mueve tus commits encima del resto y si tienes que hacer merge te avisa para que lo hagas manualmente, más: http://randyfay.com/node/103

Gracias Pedro, Me lo apunto,

oskar_calvo's picture

Gracias Pedro,

Me lo apunto, y no olvido que de esto sale una página wiki para la comunidad ;)

Oskar