C贸mo hacerlo con Git

La OCA hace tiempo public贸 una receta para hacer migraciones de c贸digo con Git, que me sirvi贸 como gu铆a.

A continuaci贸n os pongo los comandos a seguir. En estas instrucciones ver谩s que a veces hago checkout a un commit concreto. Esto es para asegurarme de que el ejemplo sea eternamente reproducible, pero no har铆a falta en otro caso normalmente. Os pongo en un comentario cu谩l ser铆a la referencia normal a poner ah铆 en vez del hash del commit.

$ git clone https://github.com/OCA/partner-contact.git --branch 8.0
$ cd partner-contact
$ git checkout 21c3235  # origin/8.0
$ git checkout -b migration-base
$ git remote add antiun-odoo-addons https://github.com/Antiun/antiun-odoo-addons.git
$ git fetch antiun-odoo-addons 8.0
$ git checkout d934c36  # antiun-odoo-addons/8.0
$ git checkout -b migration1
$ module=crm_department
$ git filter-branch --subdirectory-filter $module --force
$ git filter-branch --force --tree-filter "mkdir -pv $module; git mv -k * $module" HEAD
$ git rebase 21c3235  # origin/8.0
$ git checkout d934c36  # antiun-odoo-addons/8.0
$ git checkout -b migration2
$ module=crm_partner_department
$ git filter-branch --subdirectory-filter $module --force
$ git filter-branch --force --tree-filter "mkdir -pv $module; git mv -k * $module" HEAD
$ git rebase migration1
$ git branch --delete migration1
$ mv crm_partner_department partner_contact_department
$ git add .
$ git commit --message "Rename to partner_contact_department"

A continuaci贸n ya tendr铆a mi rama migration2 lista para hacer las modificaciones que quiera y mandar mi PR.

La sensaci贸n despu茅s de hacer esto es:

[caption id="attachment_926" align="aligncenter" width="195"]Feel like a hacker Feel like a hacker[/caption]

C贸mo hacerlo con Mercurial

Enseguida me pregunt茅 si esto se podr铆a hacer con Mercurial, y sorprendentemente como no pod铆a ser de otra forma, es mucho m谩s sencillo (al menos, de recordar). Necesitar谩s activar la extensi贸n Convert y luego crear un fichero que llamar茅 filemap.txt con este contenido:

include crm_department
include crm_partner_department
rename crm_partner_department partner_contact_department

Ahora ejecutaremos estos comandos:

$ git clone https://github.com/OCA/partner-contact.git --branch 8.0
$ git clone https://github.com/Antiun/antiun-odoo-addons.git --branch 8.0
$ hg convert --rev d934c36 --filemap filemap.txt antiun-odoo-addons antiun-odoo-addons-hg
$ hg convert --rev 21c3235 partner-contact partner-contact-hg
$ cd partner-contact-hg
$ hg update
$ hg pull --force ../antiun-odoo-addons-hg/
$ hg merge
$ hg commit --message "Rename to partner_contact_department

La sensaci贸n, despu茅s de hacer esto es:

[caption id="attachment_927" align="aligncenter" width="250"]Hacking like a sir Hacking like a sir[/caption]

Y, por supuesto, esto usando tan solo extensiones oficiales de Mercurial (las que vienen instaladas pero desactivadas), que si usas hg-git (dnf install hg-git) puedes hacer pull y push directamente a repositorios Git.