SlideShare una empresa de Scribd logo
1 de 29
Mercurial / Hg @jordi9 26 enero 2011
roadmap svn to hg Conceptos Trabajo en equipo Cosas que hay que saber Resources Q & A #seedrockethg http://bitbucket.org/jordi9/gtug-unit-testing http://slideshare.net/giro9
svn to hg... por qué? escribes código perfecto a la primera?     si!  (mientes)     no... tenemos un problema...          tu código lo recibe todo el mundo cuando lo subes. dónde está el problema?      subes código erróneo y te vas tarde un viernes      no lo subes hasta que estás seguro que todo está bien    puedes estar semanas sin "aprovecharte" del vcs!      en mercurial todos los cambios son locales,     por eso se conoce como un DVCS  
svn to hg... más diferencias svn Cada commit = Foto de como estaba el sistema de ficheros en                          ese momento  (revision - lineal) hg Cada commit = Listado de cambios preciso de cada revisión                          (changeset - SHA-1) svn merge? revi 1 - rev 2 - branch - rev 3... imposible hacer merge!      en los DVCS se hace un gran trabajo en saber que ha pasado      en cada cambio control de ficheros... o directorios? svn controla los ficheros y directorios por separado, mientra que para hg es todo un conjunto.
hello hg hg init  / crear un repositorio $ hg init y... ya está? si!      tenemos un repositorio creado.       mercurial guarda su metadata en el directorio  .hg hg add  / añadir ficheros al repo $ echo foo > foo.txt  $ hg add Por defecto se añaden todos los ficheros
empezemos a trabajar hg commit  / hacer commit $ hg commit #abre editor $ hg commit -m "Your commit message here" acabamos de hacer un commit en nuestro repo  local y privado      podemos hacer tantos commits como queramos!      nadie te echará bronca por romper el build en local ;) hg revert  / vamos a hacer más cambios $ echo bar >> foo.txt  # imaginar muchos más cambios  # ... # uupppps! no era lo que se pedía $ hg revert --all
más operaciones hg status  / que ha pasado mientras editaba $ echo bar >> foo.txt  $ hg status    M = Modified    ? = Desconocido (hg add si lo queremos controlar)    ! = Un fichero que debería estar, ya no está... ugh    R = Fichero quitado del repo   hg remove  / eliminar un fichero  $ echo bar > bar.txt $ hg add $ rm bar.txt $ hg st M foo.txt ! bar.txt $ hg remove bar.txt Hay que avisar a mercurial cuando se borra un fichero, y así lo quita del repositorio. La mayoría de IDEs lo hacen automáticamente
y un poco de historial y config hg log  / el historial de cambios $ hg log hg glog  / el historial en forma de arbol $ hg glog   primero hay que activar la extensión     Mercurial utiliza un fichero de configuración 1  por repo / user / install      en unix   ~/.hgrc      en win   C:rogram Filesercurialercurial.ini     añadir lo siguiente:    [extensions]    hgext.graphlog = 1  http://www.selenic.com/mercurial/hgrc.5.html
trabajo en equipo
repositorio "central" en los DVCS (como hg) no hay un repositorio autoritario     todos los cambios, branches, tags, son operaciones locales en un DVCS puedes trabajar sin tener que pasar por ningún servidor centralizado      en un VCS tradicional, todo debe pasar por servidor aun así, si que suele haber un repo común, que solo ejerce de canal para compartir el trabajo.       no tiene ningún tipo de autoridad se suele hablar de repo local y repo remoto o central
como montar un repo central hg serve  / iniciar el servidor $ hg serve # built in web server, running on http://localhost:8000/ ya está! Cualquiera puede compartir su repo y en la vida real...utilizar BitBucket!                          http://bitbucket.org/ by Atlassian                          Gratuíto para 5 usuarios, repos infinitos, muy barato luego.                          Wiki, issues y sobretodo...  rápido. o si no... utilizar google code, que también da soporte a hg!
bajarse un proyecto hg clone  / clonar un repo $ hg clone https://bitbucket.org/jordi9/gtug-unit-testing unit-testing vamos a arreglar un bug y compartirlo $ mvn test [INFO] ------------------------- [INFO] BUILD FAILURE [INFO] ------------------------- $ vim DatabaseTest.java $ mvn test [INFO] ------------------------- [INFO] BUILD SUCCESS [INFO] ------------------------- $ hg commit -m "Fixed bug for maven: empty test" $ hg push
actualizar un proyecto hg pull  / bajarse los cambios $ hg pull ahora solo nos hemos bajado los cambios, pero el working directory  no ha cambiado... hg update  / actualizar el working directory con el pull $ hg update pull + update, lo que casi siempre haremos $ hg pull -u hg incoming | outgoing vemos los cambios que hay respecto al repo central... "lo que se bajará, y lo que se subirá"
varios usuarios trabajando... alguien cambia un fichero que nosotros también hemos modificado $ vim StringsTest.java # Añadimos un cambio otherUser$ eclipse StringsTest.java # Añade otro cambio y lo sube vamos a subir nuestros cambios $ hg commit -m "Added stupid logging" $ hg push abort: push creates new remote heads on branch 'default'! (you should pull and merge or use push -f to force) no utilizar el -f (force) en el mismo branch! si lo hacemos nuestros cambios no lo verán el resto hasta que...
juntar el trabajo / merge cuando hay cambios remotos desde nuestro último pull, hay que juntarlos hg merge  / a juntar cambios $ hg pull  #primero hay que bajar los cambios added 1 changesets with 1 changes to 1 files (+1 heads) (run 'hg heads' to see heads,  'hg merge' to merge ) $  hg merge 0 files updated, 1 files merged, 0 files removed, 0 files unresolved (branch merge,  don't forget to commit ) $ hg commit -m "Merged with HASH"
workflow típico cuando reanudamos nuestro trabajo $ hg pull -u # work work work... $ hg commit  # keep track of your changes and keep going! # work work work... cuando ya estamos listos para compartir nuestro trabajo $ hg pull $ hg merge $ mvn install  # o el sistema que utilicéis para comprobar que todo                        está bien $ hg commit (el merge) $ hg push
.hg / branches / tags cosas que hay que saber
branches trunk (svn) = master (git) =  default (hg) En mercurial el branch por defecto se llama  default      svn users: no existe la típica estructura de trunk / branches / tags hg branch  / ver en que branch estamos $ hg branch hg branch  / crear una named branch $ hg branch newfeature # parece que no hagamos nada.. pero a partir ahora  # todos los commits se harán en este branch $ hg ci -m "started feature branch"
como trabajar con branches / releases clone  way... o  branch  way  (power user) hacemos cambios en el branch newfeature $ hg branch newfeature $ echo "foo" > foo.txt $ hg ci -A -m "Added foo file" $ hg push pushing to https://bitbucket.org/jordi9/gtug-unit-testing searching for changes abort: push creates new remote branches: new! (use ' hg push --new-branch ' to create new remote branches) mercurial te hace ser explicito cuando creas un branch remoto, por si te has olvidado de hacer merge antes...
creando un branch remoto hg push --new-branch  / branch remoto $ hg push --new-branch $ hg log # en algunos editores utilizar -f (force), aquí si se puede utilizar ahora podemos ir cambiando entre un branch stable y otro de pruebas hg branches  / ver que banches existen $ hg branches hg update branchname  / cambiar de branch $ hg update newfeature y juntar los cambios cuando queramos  con merge $ hg merge newfeature
branches best practices branches trabajar en  default  (o en alguna "feature" branch) y utilizar un branch  stable  para todo el código que esté live utilizar branches para "experimentos" largos o releases cuando hacemos merge... hay que pensar "estoy en el branch X, hago merge con Y, y sigo trabajando con X" eg: estamos desarrollando newfeature y necesitamos traer cambios de stable $ hg up newfeature $ hg merge stable $ hg ci -m "Using last stable version on newfeature" # keep working cerrar named branch $ hg up newfeature $ hg ci -m "Closed branch"  --close-branch
branches best practices++ cerrar named branches $ hg up newfeature $ hg ci -m "Closed branch"  --close-branch $ hg up default $ hg merge newfeature $ hg ci -m "Merged new feature into default" ahora ya tenemos la nueva feature en default, y el branch no aparece en hg branches
tags funcionan con el mismo propósito que los otros (D)VCS: "acordarnos" de un changeset en concreto... suele coincidir con la versión de la aplicación. tip tag por defecto (y que no se puede borrar) que nos indica cual es el último head en nuestro repo.  eg: si hacemos un pull sin update, es muy posible que ya no estemos en el tip hg tag  / crear un tag $ hg tag version-1.0.0 hg tag  g/ listado de tags en nuestro repo $ hg tags
.hgignore para ignorar ficheros se configura por repo en el fichero .hgignore, que tiene que estar en la raiz del repo (al lado de donde está la carpeta .hg) como ignorar una carpeta, o un fichero... funciona con expresiones regulares $ vim .hgignore # espacio en blanco! syntax: regexp build syntax: regexp ^.*/target$
hgrc configuración del repo / user / instalación.  es posible que lo tengamos que crear debe estar en la carpeta .hg que está en la raiz del repo de donde se hace el pull / push?  hay que definir el path default.       si el repo se ha empezado con clone, ya está puesto por defecto $ vim .hg/hgrc [paths] default = https://bitbucket.org/jordi9/gtug-unit-testing unit-testing como guardo mi user / pass? $ vim .hg/hgrc [auth] repo.prefix = bitbucket.org repo.username = jordi9 repo.password = foobar
y muchísimas más opciones! hg rebase  / cambiar el parent de un changeset útil para tener una historia más lineal hg strip  / hacer desaparecer un commit útil para ir hacia atrás sin dejar rastro IDEs & tools soporte para la mayoría de IDEs: eclipse, netbeans, intellij idea... tortoiseHg       muy recomendable utilizarlos, sobretodo para resolver conflictos
resources tutorial básico un gran inicio /  www.hginit.com libro mercurial: the definitive guide gratis /  hgbook.red-bean.com cheat sheets usage /   bit.ly/hgsheet quick start /  bit.ly/hgquick    comparación con git by Google, cuando decidió hg en vez de git /  bit.ly/hgvsgit  
gracias! jordi @donky.org @jordi9
Q & A jordi @donky.org @jordi9

Más contenido relacionado

La actualidad más candente

La actualidad más candente (20)

Usando docker
Usando dockerUsando docker
Usando docker
 
Control de versiones con Git y Github
Control de versiones con Git y GithubControl de versiones con Git y Github
Control de versiones con Git y Github
 
Presentación Docker
Presentación DockerPresentación Docker
Presentación Docker
 
BEEVA | Introducción a Docker
BEEVA | Introducción a DockerBEEVA | Introducción a Docker
BEEVA | Introducción a Docker
 
DevOps+[Chef/Docker]
 DevOps+[Chef/Docker] DevOps+[Chef/Docker]
DevOps+[Chef/Docker]
 
Pruebas de integración con Docker en Azure DevOps
Pruebas de integración con Docker en Azure DevOpsPruebas de integración con Docker en Azure DevOps
Pruebas de integración con Docker en Azure DevOps
 
Docker - Sysmana 2014
Docker - Sysmana 2014Docker - Sysmana 2014
Docker - Sysmana 2014
 
Docker: la revolución en virtualización
Docker: la revolución en virtualizaciónDocker: la revolución en virtualización
Docker: la revolución en virtualización
 
Git / Guía Básica
Git / Guía BásicaGit / Guía Básica
Git / Guía Básica
 
Introduction to docker. Stratio
Introduction to docker. StratioIntroduction to docker. Stratio
Introduction to docker. Stratio
 
De desarrollo a producción usando docker
De desarrollo a producción usando dockerDe desarrollo a producción usando docker
De desarrollo a producción usando docker
 
Creacion y Administracion de servicios usando Docker - .Net Conf Mx 2018
Creacion y Administracion de servicios usando Docker - .Net Conf Mx 2018Creacion y Administracion de servicios usando Docker - .Net Conf Mx 2018
Creacion y Administracion de servicios usando Docker - .Net Conf Mx 2018
 
Introducción a Docker
Introducción a DockerIntroducción a Docker
Introducción a Docker
 
Sistemas para el Control de Versiones de Código
Sistemas para el Control de Versiones de CódigoSistemas para el Control de Versiones de Código
Sistemas para el Control de Versiones de Código
 
Presentación SUbversion
Presentación SUbversionPresentación SUbversion
Presentación SUbversion
 
Introduccion A Docker
Introduccion A DockerIntroduccion A Docker
Introduccion A Docker
 
nerdear.la 2016 - Docker workshop
nerdear.la 2016 - Docker workshopnerdear.la 2016 - Docker workshop
nerdear.la 2016 - Docker workshop
 
Conceptos avanzados en docker
Conceptos avanzados en dockerConceptos avanzados en docker
Conceptos avanzados en docker
 
Solapas principales Ver(solapa activa) Editar Gestionar present...
 Solapas principales      Ver(solapa activa)     Editar     Gestionar present... Solapas principales      Ver(solapa activa)     Editar     Gestionar present...
Solapas principales Ver(solapa activa) Editar Gestionar present...
 
FROM lost to the docker
FROM lost to the dockerFROM lost to the docker
FROM lost to the docker
 

Destacado

Ende, michael jim boton y lucas el maquinista204pags.
Ende, michael   jim boton y lucas el maquinista204pags.Ende, michael   jim boton y lucas el maquinista204pags.
Ende, michael jim boton y lucas el maquinista204pags.
Cuentos Universales
 
Informe público barómetro marca ciudad 2011
Informe público barómetro marca ciudad 2011Informe público barómetro marca ciudad 2011
Informe público barómetro marca ciudad 2011
Visión Humana
 
Cadena de abastecimiento suesca
Cadena de abastecimiento suescaCadena de abastecimiento suesca
Cadena de abastecimiento suesca
servilogistica
 
150 Ugliest Cars
150 Ugliest Cars150 Ugliest Cars
150 Ugliest Cars
Chris Dale
 

Destacado (20)

Wonderful world of (distributed) SCM or VCS
Wonderful world of (distributed) SCM or VCSWonderful world of (distributed) SCM or VCS
Wonderful world of (distributed) SCM or VCS
 
CV TEC. ELECT DELMER
CV TEC. ELECT  DELMERCV TEC. ELECT  DELMER
CV TEC. ELECT DELMER
 
3 questions you need to ask about your brand
3 questions you need to ask about your brand3 questions you need to ask about your brand
3 questions you need to ask about your brand
 
IPL Brochure
IPL BrochureIPL Brochure
IPL Brochure
 
Curso de Posicionamiento y Marketing de buscadores: SEO, SEM y Analítica
Curso de Posicionamiento y Marketing de buscadores: SEO, SEM y AnalíticaCurso de Posicionamiento y Marketing de buscadores: SEO, SEM y Analítica
Curso de Posicionamiento y Marketing de buscadores: SEO, SEM y Analítica
 
Moción instituciona lcarril de orozco febrero 2016
Moción instituciona lcarril de orozco febrero 2016Moción instituciona lcarril de orozco febrero 2016
Moción instituciona lcarril de orozco febrero 2016
 
Logo design1
Logo design1Logo design1
Logo design1
 
ORGANOS DE LOS SENTIDOS
ORGANOS DE LOS SENTIDOSORGANOS DE LOS SENTIDOS
ORGANOS DE LOS SENTIDOS
 
Ramón Cabanillas
Ramón CabanillasRamón Cabanillas
Ramón Cabanillas
 
Ende, michael jim boton y lucas el maquinista204pags.
Ende, michael   jim boton y lucas el maquinista204pags.Ende, michael   jim boton y lucas el maquinista204pags.
Ende, michael jim boton y lucas el maquinista204pags.
 
dgaweb
dgawebdgaweb
dgaweb
 
AJS direct mail piece
AJS direct mail pieceAJS direct mail piece
AJS direct mail piece
 
Informe público barómetro marca ciudad 2011
Informe público barómetro marca ciudad 2011Informe público barómetro marca ciudad 2011
Informe público barómetro marca ciudad 2011
 
Carte des Pyrénées catalanes
Carte des Pyrénées catalanesCarte des Pyrénées catalanes
Carte des Pyrénées catalanes
 
Smile magento 1.9.1
Smile magento 1.9.1Smile magento 1.9.1
Smile magento 1.9.1
 
Estrategia Social Commerce
Estrategia Social CommerceEstrategia Social Commerce
Estrategia Social Commerce
 
Cadena de abastecimiento suesca
Cadena de abastecimiento suescaCadena de abastecimiento suesca
Cadena de abastecimiento suesca
 
150 Ugliest Cars
150 Ugliest Cars150 Ugliest Cars
150 Ugliest Cars
 
Treball tecnologia GES II
Treball tecnologia GES IITreball tecnologia GES II
Treball tecnologia GES II
 
Ultragreen- depuración biológica membranas planas de ultrafiltracion
Ultragreen- depuración biológica membranas planas de ultrafiltracionUltragreen- depuración biológica membranas planas de ultrafiltracion
Ultragreen- depuración biológica membranas planas de ultrafiltracion
 

Similar a Mercurial

05 intro-git-github-heroku-v4
05 intro-git-github-heroku-v405 intro-git-github-heroku-v4
05 intro-git-github-heroku-v4
fyomaira
 
Cvs EspañOl
Cvs EspañOlCvs EspañOl
Cvs EspañOl
rigol03
 
97132962-instalacion-de-open meetings-en-squeeze
 97132962-instalacion-de-open meetings-en-squeeze 97132962-instalacion-de-open meetings-en-squeeze
97132962-instalacion-de-open meetings-en-squeeze
xavazquez
 

Similar a Mercurial (20)

Flujo de trabajo básico con git
Flujo de trabajo básico con gitFlujo de trabajo básico con git
Flujo de trabajo básico con git
 
Git
GitGit
Git
 
Git + Github - Sysmana 2014
Git + Github - Sysmana 2014Git + Github - Sysmana 2014
Git + Github - Sysmana 2014
 
Intro a GIT
Intro a GITIntro a GIT
Intro a GIT
 
Introducción a GIT
Introducción a GITIntroducción a GIT
Introducción a GIT
 
Git + Github - Betabeers Córdoba XII
Git + Github - Betabeers Córdoba XIIGit + Github - Betabeers Córdoba XII
Git + Github - Betabeers Córdoba XII
 
05 intro-git-github-heroku-v4
05 intro-git-github-heroku-v405 intro-git-github-heroku-v4
05 intro-git-github-heroku-v4
 
Git - Gitlab
Git - GitlabGit - Gitlab
Git - Gitlab
 
Cvs EspañOl
Cvs EspañOlCvs EspañOl
Cvs EspañOl
 
Git.manual.usuario
Git.manual.usuarioGit.manual.usuario
Git.manual.usuario
 
Git (i) fork - commit - pull - push
Git (i)   fork - commit - pull - pushGit (i)   fork - commit - pull - push
Git (i) fork - commit - pull - push
 
Drupal 8: deploy capistrano y gestión de la configuración
Drupal 8: deploy capistrano y gestión de la configuraciónDrupal 8: deploy capistrano y gestión de la configuración
Drupal 8: deploy capistrano y gestión de la configuración
 
Más allá de Git add/commit/push
Más allá de Git add/commit/pushMás allá de Git add/commit/push
Más allá de Git add/commit/push
 
Instrucciones_Git.pdf
Instrucciones_Git.pdfInstrucciones_Git.pdf
Instrucciones_Git.pdf
 
Hg mini manual
Hg mini manualHg mini manual
Hg mini manual
 
Git 01-introduccion
Git 01-introduccionGit 01-introduccion
Git 01-introduccion
 
Gestión de configuración con mercurial y etckeeper
Gestión de configuración con mercurial y etckeeperGestión de configuración con mercurial y etckeeper
Gestión de configuración con mercurial y etckeeper
 
Taller Git en la URJC
Taller Git en la URJC Taller Git en la URJC
Taller Git en la URJC
 
Gestión de configuración distribuída para la plataforma de Canaima
Gestión de configuración distribuída para la plataforma de Canaima Gestión de configuración distribuída para la plataforma de Canaima
Gestión de configuración distribuída para la plataforma de Canaima
 
97132962-instalacion-de-open meetings-en-squeeze
 97132962-instalacion-de-open meetings-en-squeeze 97132962-instalacion-de-open meetings-en-squeeze
97132962-instalacion-de-open meetings-en-squeeze
 

Más de Jordi Gerona (7)

Netty from the trenches
Netty from the trenchesNetty from the trenches
Netty from the trenches
 
Google Guava - Core libraries for Java & Android
Google Guava - Core libraries for Java & AndroidGoogle Guava - Core libraries for Java & Android
Google Guava - Core libraries for Java & Android
 
Clean code via dependency injection + guice
Clean code via dependency injection + guiceClean code via dependency injection + guice
Clean code via dependency injection + guice
 
Unit Testing - Trovit
Unit Testing - TrovitUnit Testing - Trovit
Unit Testing - Trovit
 
Mitos y otras criaturas startuperas (webbar)
Mitos y otras criaturas startuperas (webbar)Mitos y otras criaturas startuperas (webbar)
Mitos y otras criaturas startuperas (webbar)
 
Unit Testing - GTUG
Unit Testing - GTUGUnit Testing - GTUG
Unit Testing - GTUG
 
Dependency Injection con Guice - GTUG
Dependency Injection con Guice - GTUGDependency Injection con Guice - GTUG
Dependency Injection con Guice - GTUG
 

Mercurial

  • 1. Mercurial / Hg @jordi9 26 enero 2011
  • 2. roadmap svn to hg Conceptos Trabajo en equipo Cosas que hay que saber Resources Q & A #seedrockethg http://bitbucket.org/jordi9/gtug-unit-testing http://slideshare.net/giro9
  • 3. svn to hg... por qué? escribes código perfecto a la primera?    si! (mientes)    no... tenemos un problema...         tu código lo recibe todo el mundo cuando lo subes. dónde está el problema?      subes código erróneo y te vas tarde un viernes      no lo subes hasta que estás seguro que todo está bien    puedes estar semanas sin "aprovecharte" del vcs!      en mercurial todos los cambios son locales,     por eso se conoce como un DVCS  
  • 4. svn to hg... más diferencias svn Cada commit = Foto de como estaba el sistema de ficheros en                          ese momento (revision - lineal) hg Cada commit = Listado de cambios preciso de cada revisión                          (changeset - SHA-1) svn merge? revi 1 - rev 2 - branch - rev 3... imposible hacer merge!      en los DVCS se hace un gran trabajo en saber que ha pasado      en cada cambio control de ficheros... o directorios? svn controla los ficheros y directorios por separado, mientra que para hg es todo un conjunto.
  • 5. hello hg hg init / crear un repositorio $ hg init y... ya está? si!      tenemos un repositorio creado.       mercurial guarda su metadata en el directorio .hg hg add  / añadir ficheros al repo $ echo foo > foo.txt  $ hg add Por defecto se añaden todos los ficheros
  • 6. empezemos a trabajar hg commit  / hacer commit $ hg commit #abre editor $ hg commit -m "Your commit message here" acabamos de hacer un commit en nuestro repo local y privado      podemos hacer tantos commits como queramos!      nadie te echará bronca por romper el build en local ;) hg revert / vamos a hacer más cambios $ echo bar >> foo.txt  # imaginar muchos más cambios  # ... # uupppps! no era lo que se pedía $ hg revert --all
  • 7. más operaciones hg status  / que ha pasado mientras editaba $ echo bar >> foo.txt  $ hg status    M = Modified    ? = Desconocido (hg add si lo queremos controlar)    ! = Un fichero que debería estar, ya no está... ugh    R = Fichero quitado del repo   hg remove / eliminar un fichero  $ echo bar > bar.txt $ hg add $ rm bar.txt $ hg st M foo.txt ! bar.txt $ hg remove bar.txt Hay que avisar a mercurial cuando se borra un fichero, y así lo quita del repositorio. La mayoría de IDEs lo hacen automáticamente
  • 8. y un poco de historial y config hg log  / el historial de cambios $ hg log hg glog  / el historial en forma de arbol $ hg glog   primero hay que activar la extensión    Mercurial utiliza un fichero de configuración 1  por repo / user / install      en unix   ~/.hgrc      en win   C:rogram Filesercurialercurial.ini    añadir lo siguiente:    [extensions]    hgext.graphlog = 1  http://www.selenic.com/mercurial/hgrc.5.html
  • 10. repositorio "central" en los DVCS (como hg) no hay un repositorio autoritario    todos los cambios, branches, tags, son operaciones locales en un DVCS puedes trabajar sin tener que pasar por ningún servidor centralizado      en un VCS tradicional, todo debe pasar por servidor aun así, si que suele haber un repo común, que solo ejerce de canal para compartir el trabajo.       no tiene ningún tipo de autoridad se suele hablar de repo local y repo remoto o central
  • 11. como montar un repo central hg serve  / iniciar el servidor $ hg serve # built in web server, running on http://localhost:8000/ ya está! Cualquiera puede compartir su repo y en la vida real...utilizar BitBucket!                          http://bitbucket.org/ by Atlassian                          Gratuíto para 5 usuarios, repos infinitos, muy barato luego.                          Wiki, issues y sobretodo... rápido. o si no... utilizar google code, que también da soporte a hg!
  • 12. bajarse un proyecto hg clone  / clonar un repo $ hg clone https://bitbucket.org/jordi9/gtug-unit-testing unit-testing vamos a arreglar un bug y compartirlo $ mvn test [INFO] ------------------------- [INFO] BUILD FAILURE [INFO] ------------------------- $ vim DatabaseTest.java $ mvn test [INFO] ------------------------- [INFO] BUILD SUCCESS [INFO] ------------------------- $ hg commit -m "Fixed bug for maven: empty test" $ hg push
  • 13. actualizar un proyecto hg pull  / bajarse los cambios $ hg pull ahora solo nos hemos bajado los cambios, pero el working directory  no ha cambiado... hg update  / actualizar el working directory con el pull $ hg update pull + update, lo que casi siempre haremos $ hg pull -u hg incoming | outgoing vemos los cambios que hay respecto al repo central... "lo que se bajará, y lo que se subirá"
  • 14. varios usuarios trabajando... alguien cambia un fichero que nosotros también hemos modificado $ vim StringsTest.java # Añadimos un cambio otherUser$ eclipse StringsTest.java # Añade otro cambio y lo sube vamos a subir nuestros cambios $ hg commit -m "Added stupid logging" $ hg push abort: push creates new remote heads on branch 'default'! (you should pull and merge or use push -f to force) no utilizar el -f (force) en el mismo branch! si lo hacemos nuestros cambios no lo verán el resto hasta que...
  • 15. juntar el trabajo / merge cuando hay cambios remotos desde nuestro último pull, hay que juntarlos hg merge / a juntar cambios $ hg pull #primero hay que bajar los cambios added 1 changesets with 1 changes to 1 files (+1 heads) (run 'hg heads' to see heads, 'hg merge' to merge ) $ hg merge 0 files updated, 1 files merged, 0 files removed, 0 files unresolved (branch merge, don't forget to commit ) $ hg commit -m "Merged with HASH"
  • 16. workflow típico cuando reanudamos nuestro trabajo $ hg pull -u # work work work... $ hg commit  # keep track of your changes and keep going! # work work work... cuando ya estamos listos para compartir nuestro trabajo $ hg pull $ hg merge $ mvn install  # o el sistema que utilicéis para comprobar que todo                        está bien $ hg commit (el merge) $ hg push
  • 17. .hg / branches / tags cosas que hay que saber
  • 18. branches trunk (svn) = master (git) = default (hg) En mercurial el branch por defecto se llama  default      svn users: no existe la típica estructura de trunk / branches / tags hg branch  / ver en que branch estamos $ hg branch hg branch  / crear una named branch $ hg branch newfeature # parece que no hagamos nada.. pero a partir ahora  # todos los commits se harán en este branch $ hg ci -m "started feature branch"
  • 19. como trabajar con branches / releases clone way... o branch way (power user) hacemos cambios en el branch newfeature $ hg branch newfeature $ echo "foo" > foo.txt $ hg ci -A -m "Added foo file" $ hg push pushing to https://bitbucket.org/jordi9/gtug-unit-testing searching for changes abort: push creates new remote branches: new! (use ' hg push --new-branch ' to create new remote branches) mercurial te hace ser explicito cuando creas un branch remoto, por si te has olvidado de hacer merge antes...
  • 20. creando un branch remoto hg push --new-branch  / branch remoto $ hg push --new-branch $ hg log # en algunos editores utilizar -f (force), aquí si se puede utilizar ahora podemos ir cambiando entre un branch stable y otro de pruebas hg branches  / ver que banches existen $ hg branches hg update branchname  / cambiar de branch $ hg update newfeature y juntar los cambios cuando queramos  con merge $ hg merge newfeature
  • 21. branches best practices branches trabajar en default (o en alguna "feature" branch) y utilizar un branch stable para todo el código que esté live utilizar branches para "experimentos" largos o releases cuando hacemos merge... hay que pensar "estoy en el branch X, hago merge con Y, y sigo trabajando con X" eg: estamos desarrollando newfeature y necesitamos traer cambios de stable $ hg up newfeature $ hg merge stable $ hg ci -m "Using last stable version on newfeature" # keep working cerrar named branch $ hg up newfeature $ hg ci -m "Closed branch" --close-branch
  • 22. branches best practices++ cerrar named branches $ hg up newfeature $ hg ci -m "Closed branch" --close-branch $ hg up default $ hg merge newfeature $ hg ci -m "Merged new feature into default" ahora ya tenemos la nueva feature en default, y el branch no aparece en hg branches
  • 23. tags funcionan con el mismo propósito que los otros (D)VCS: "acordarnos" de un changeset en concreto... suele coincidir con la versión de la aplicación. tip tag por defecto (y que no se puede borrar) que nos indica cual es el último head en nuestro repo.  eg: si hacemos un pull sin update, es muy posible que ya no estemos en el tip hg tag / crear un tag $ hg tag version-1.0.0 hg tag  g/ listado de tags en nuestro repo $ hg tags
  • 24. .hgignore para ignorar ficheros se configura por repo en el fichero .hgignore, que tiene que estar en la raiz del repo (al lado de donde está la carpeta .hg) como ignorar una carpeta, o un fichero... funciona con expresiones regulares $ vim .hgignore # espacio en blanco! syntax: regexp build syntax: regexp ^.*/target$
  • 25. hgrc configuración del repo / user / instalación.  es posible que lo tengamos que crear debe estar en la carpeta .hg que está en la raiz del repo de donde se hace el pull / push?  hay que definir el path default.       si el repo se ha empezado con clone, ya está puesto por defecto $ vim .hg/hgrc [paths] default = https://bitbucket.org/jordi9/gtug-unit-testing unit-testing como guardo mi user / pass? $ vim .hg/hgrc [auth] repo.prefix = bitbucket.org repo.username = jordi9 repo.password = foobar
  • 26. y muchísimas más opciones! hg rebase  / cambiar el parent de un changeset útil para tener una historia más lineal hg strip  / hacer desaparecer un commit útil para ir hacia atrás sin dejar rastro IDEs & tools soporte para la mayoría de IDEs: eclipse, netbeans, intellij idea... tortoiseHg       muy recomendable utilizarlos, sobretodo para resolver conflictos
  • 27. resources tutorial básico un gran inicio /  www.hginit.com libro mercurial: the definitive guide gratis /  hgbook.red-bean.com cheat sheets usage /   bit.ly/hgsheet quick start /  bit.ly/hgquick   comparación con git by Google, cuando decidió hg en vez de git /  bit.ly/hgvsgit  
  • 29. Q & A jordi @donky.org @jordi9

Notas del editor

  1. Introduir eventuo, els seus inicis, alguna caracterísitca? escollir tecnologies, descobrir Guice i com va canviar el meu punt de vista
  2. parlar d'un test com pensar el que volem o esperem que passi.
  3. parlar d'un test com pensar el que volem o esperem que passi.
  4. parlar d'un test com pensar el que volem o esperem que passi.
  5. parlar d'un test com pensar el que volem o esperem que passi.
  6. parlar d'un test com pensar el que volem o esperem que passi.
  7. parlar d'un test com pensar el que volem o esperem que passi.
  8. parlar d'un test com pensar el que volem o esperem que passi.
  9. parlar d'un test com pensar el que volem o esperem que passi.
  10. parlar d'un test com pensar el que volem o esperem que passi.
  11. parlar d'un test com pensar el que volem o esperem que passi.
  12. parlar d'un test com pensar el que volem o esperem que passi.
  13. parlar d'un test com pensar el que volem o esperem que passi.
  14. parlar d'un test com pensar el que volem o esperem que passi.
  15. parlar d'un test com pensar el que volem o esperem que passi.
  16. parlar d'un test com pensar el que volem o esperem que passi.
  17. parlar d'un test com pensar el que volem o esperem que passi.
  18. parlar d'un test com pensar el que volem o esperem que passi.
  19. parlar d'un test com pensar el que volem o esperem que passi.
  20. parlar d'un test com pensar el que volem o esperem que passi.
  21. parlar d'un test com pensar el que volem o esperem que passi.
  22. parlar d'un test com pensar el que volem o esperem que passi.
  23. parlar d'un test com pensar el que volem o esperem que passi.
  24. parlar d'un test com pensar el que volem o esperem que passi.