Cómo usar autosquash en Git

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.

Para evitar tener que hacer estas cosas, podemos hacer cualquiera de estos 2 comandos:

$ git commit --all --fixup $COMMIT
$ git commit --all --squash $COMMIT

El primero marcará el nuevo commit como para desaparecer y mezclarse con $COMMIT (ante las dudas, COMMIT=HEAD). El segundo hará lo mismo, pero en modo squash, es decir que mezclará no solo el código que ha cambiado sino el mensaje del commit (salvo la primera línea).

Cuando haya que hacer el squash final:

$ git rebase -i --autosquash

Y los commits que hayas marcado previamente te aparecerán en orden y ya premarcados con la acción correspondiente.

También puedes hacer este comportamiento el por defecto de rebase:

$ git config --global rebase.autoSquash true
Anuncios

Cómo añadir ramas remotas en git si clonaste con –depth o –single-branch

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?

Continúa leyendo Cómo añadir ramas remotas en git si clonaste con –depth o –single-branch

Cómo actualizar un backport modificado con Git

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.

Continúa leyendo Cómo actualizar un backport modificado con Git

Autoinstalador de paquetes en Fedora

No sé si esto está disponible en otras distribuciones, pero es una pasada. Escribes un comando, y si no encuentra el paquete que lo ejecuta, te lo instala automáticamente:

Continúa leyendo Autoinstalador de paquetes en Fedora

¿Realmente hace falta la cabecera de la licencia en cada fichero de código fuente?

Antes que nada, IANAL. Prosigamos.

Las instrucciones para usar una licencia GPL te dicen que debes incluir un comentario gigante como cabecera de cada fichero de tu código fuente, tal que así:

This file is part of Foobar.

<one line to give the program’s name and a brief idea of what it does.>

Copyright (C) <year> <name of author>

Foobar is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

Foobar is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with Foobar. If not, see <http://www.gnu.org/licenses/&gt;.

Lo cual es horrible, porque aparte de molestar un montón para leer un fichero (hay algunos cuyo código fuente es inferior a la propia cabecera), encima tienes que incluir el nombre del programa, con lo que si le cambias el nombre más adelante, o si cambias la licencia, tienes que hacer un trabajo de chinos para reemplazar todo.

Continúa leyendo ¿Realmente hace falta la cabecera de la licencia en cada fichero de código fuente?

Transferir código entre repositorios, con archivos renombrados

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:

Veamos cómo se puede hacer con Git y con Mercurial.

Continúa leyendo Transferir código entre repositorios, con archivos renombrados

Convierte tu tableta Android en un puesto de trabajo

Si trabajas como hacker, programador y/o administrador de sistemas, agradecerás tener a mano en tu tableta un kit básico con las 4 herramientas clave que uses a diario, que además son libres:

Continúa leyendo Convierte tu tableta Android en un puesto de trabajo