Primero, el contexto: quería abrir este backport a OCB 9.0, pero había clonado así:
$ git clone --depth 100 --branch 9.0 https://github.com/OCA/OCB.git
El problema ahora es que para hacer cherry-pick del commit correspondiente en Odoo 10.0, hubiera necesitado mucho tiempo descargando todo ese árbol de código, que es considerablemente grande.
Es por eso que usé un par de herramientas que nos dan git y GitHub para estos menesteres:
Cuando uno trabaja en una rama de desarrollo con git, es bastante habitual que haya que cambiar multitud de detalles hasta que se mezcla en la rama principal. A veces lo que estás desarrollando incluye varios commits lógicos, pero se acaban diluyendo entre multitud de "quitar basura", "wip", "typo", "PR review", etc. Para que luego se quede el historial limpio, normalmente se hará un rebase manual, pero en tales circunstancias es un rollo.
Supongamos que tengo un repo gigantesco y quiero descargar solo 100 commits para clonar más rápido:
$ git clone --branch 9.0 --depth 100 https://github.com/odoo/odoo.git
Guay, pero ahora necesito 100 commits de la rama 10.0 también para poder cambiar a ella. Normalmente haría:
$ git fetch --depth 100 origin 10.0 $ git checkout 10.0
Pero me encuentro con que el checkout
no funciona como era de esperar...
¿Qué hago?
Bueno, esta tarea es bastante compleja, y no se me ocurren muchos ejemplos teóricos, así que vamos con un caso real.
Como muchos sabréis, soy miembro activo de la OCA y un contribuyente habitual a Odoo.
Una de las novedades de Odoo 9.0 fue el
módulo website_slides
, que
fue backporteado por la comunidad a Odoo 8.0.
Sin embargo, desde que se realizó el backport hasta el día de hoy, el módulo ha recibido varios parches upstream 9.0 que la versión backporteada no tenía, así que lo que quiero es actualizarlo, sin perder el historial de Git.
Recientemente tuve que hacer una transferencia de código fuente algo complicada. Tenía que transferir un addon de Odoo desde un repositorio a otro completamente diferente:
crm_department
.
crm_partner_department
para evitar conflictos con
un módulo llamado crm_department
de la OCA.
partner_contact_department
(aparte de otros cambios que
no vienen a cuento).
Veamos cómo se puede hacer con Git y con Mercurial.
Si eres como yo, que me gusta Mercurial por encima de todos los demás VCS que he probado, pero te ves obligado a trabajar con Git muchas veces porque, aceptémoslo, es el más popular de todos, hay una herramienta que te hará feliz: Hg-Git.
Es una elección difícil. Por suerte o por desgracia he usado los 3 últimamente, así que ahí van mis impresiones: