Primeros pasos con GIT-SVN

Partiendo de una infraestructura de SVN, todavía se puede aprovechar la versatilidad que te provee GIT para trabajar en tus modificaciones diarias e inestables (incluso muchas veces destructivas).
En el ejemplo voy a intentar hacer una demo con el svn de JBoss particularmente con el módulo de Drools.

$ git svn clone -s http://anonsvn.labs.jboss.com/labs/jbossrules/trunk/ drools-upstream && cd drools-upstream

si bien es interesante hacer esto, tarda realmente mucho, mucho, MUCHO… me fui a dormir cuando iban 6 horas… y parece que daba para bastante más. Igual vale bien la pena si uno está pensando en colaborar con alguno de estos proyectos.
Para empezar a trabajar creamos un nuevo branch del master (o el trunk en jerga SVN)

$ git checkout -b mi-feature-loca

el -b nos situa directamente en ese branch.
Comandos relacionados con la interacción git-svn:

  • git svn fetch, trae todos los cambios del repositorio SVN remoto
  • git svn rebase, igual que el anterior pero hace fast-forward de nuestros commits así quedan alineados con el árbol principal (explotando cuando no puede resolver solo los conflictos)
  • git svn dcommit, envía nuestros cambios locales como sucesivos commits de svn con los mensajes exactamente como los teníamos localmente.

Cosas útiles en el desarrollo diario:

  • git branch muestra los branches que tenemos en nuestro repositorio local resaltando el que estamos parados. Para esto también está bueno tener agregado en algún lado del PS1 de bash lo siguiente $(__git_ps1 “#%s”) , que nos agrega el branch sobre el que se trabaja.
  • git status muestra el estado del index, que es la lista de los archivos conocidos por git.
  • git add para agregar los archivos del próximo commit. A diferencia de SVN hay que agregar cada archivo antes de commitear.
  • git commit es evidente, pero para los que prefieran ahorrarse el paso anterior, pueden hacer git commit -a que envía todos los cambios en el index.

Nota al pie:
Cada vez que quieras hacer un git svn rebase luego de haber felizmente levantado todo el entorno en eclipse o sencillamente habiéndole pasado el bienaventurado mvn eclipse:eclipse, git te va a decir que los .classpath y los .project están distintos, que los mergees.
Lo primero que tienen que hacer es aumentar el karma negativo hacia cualquiera de los core developers, esto puede ser aleatorio o en grupo da igual, por permitir que esto sea así. La idea final es que en su próxima vida vuelvan en modo alimaña–.
Después lo más sano es volar todos los archivos estos y dejarle que los vuelva a cero. Para ellos copien esta línea que hará su trabajo.

git checkout drools-ant/.classpath drools-api/.classpath drools-clips/.classpath drools-compiler/.classpath drools-container/drools-mc/.classpath drools-core/.classpath drools-decisiontables/.classpath drools-examples/drools-examples-drl/.classpath drools-examples/drools-examples-drl/.project drools-examples/drools-examples-fusion/.classpath drools-examples/drools-examples-fusion/.project drools-guvnor/.classpath drools-jsr94/.classpath drools-persistence-jpa/.classpath drools-pipeline/drools-messenger-jms/.classpath drools-pipeline/drools-transformer-jaxb/.classpath drools-pipeline/drools-transformer-jxls/.classpath drools-pipeline/drools-transformer-smooks/.classpath drools-pipeline/drools-transformer-xstream/.classpath drools-process/drools-bam/.classpath drools-process/drools-process-task/.classpath drools-process/drools-workitems/.classpath drools-repository/.classpath drools-server/.classpath drools-solver/drools-solver-core/.classpath drools-solver/drools-solver-examples/.classpath drools-templates/.classpath drools-verifier/.classpath

git checkout nos sirve para volver para atrás, al último estado commiteado, a un archivo.

Advertisements

One Response

  1. con los .project no hay drama?te sirve esto?git checkout $(find . -name .classpath)

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s