En cuanto a GitHub, para cada commit o pull request, siempre podemos añadir a la URL:
.diff
para obtener el diff con respecto a la rama base.patch
para obtener el parche
Ejemplos para el commit en cuestión:
- https://github.com/odoo/odoo/commit/de62e33618211fd754ad6e372ac93805cce58770
- https://github.com/odoo/odoo/commit/de62e33618211fd754ad6e372ac93805cce58770.diff
- https://github.com/odoo/odoo/commit/de62e33618211fd754ad6e372ac93805cce58770.patch
Es por esto que pude aplicar el parche sin necesidad de descargar más histórico en Git:
$ git checkout -b 9.0-event-no_mail_cancelled # Crear una nueva rama para el PR $ curl -sSL 'https://github.com/odoo/odoo/commit/de62e33618211fd754ad6e372ac93805cce58770.patch' | git am -3 --keep-non-patch - Applying: [PATCH] [FIX] calendar, event: do not send emails to canceled attendees error: sha1 information is lacking or useless (addons/calendar/models/calendar.py). error: could not build fake ancestor Patch failed at 0001 [PATCH] [FIX] calendar, event: do not send emails to canceled attendees The copy of the patch that failed is found in: .git/rebase-apply/patch When you have resolved this problem, run "git am --continue". If you prefer to skip this patch, run "git am --skip" instead. To restore the original branch and stop patching, run "git am --abort".
💥 ¡Error! Al parecer estoy descargando cambios para
addons/calendar/models/calendar.py
, un archivo que en la rama 9.0 no
existía. El parche para dicho archivo tampoco es que me sirva de nada, así que lo
ignoraremos:
$ git am --abort # Cancelamos lo que estábamos haciendo $ curl -sSL 'https://github.com/odoo/odoo/commit/de62e33618211fd754ad6e372ac93805cce58770.patch' | git am -3 --keep-non-patch --exclude addons/calendar/models/calendar.py - Applying: [PATCH] [FIX] calendar, event: do not send emails to canceled attendees
¡Listo! Ahora, si tengo que hacer algún cambio adicional a algún fichero, puedo
hacerlo tranquilamente. También si quiero cambiar el mensaje de commit, nuestro viejo
amigo git commit --amend
nos puede servir.
Finalmente, subo el cambio a mi repositorio para poder abrir el PR:
$ git remote add tecnativa git@github.com:Tecnativa/odoo.git # El PR lo tengo que hacer desde nuestro repo $ git fetch tecnativa 9.0 # Esto sirve para que mi clon local pueda generar la diferencia de commits entre los repositorios de OCB y Tecnativa $ git push -u tecnativa 9.0-event-no_mail_cancelled # Subo los cambios de esta rama, que crearán la rama remota que no existía
¡Luego, creas el PR y listo!