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[/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[/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.