Git: Un par de trucos

Hay veces  que nos surgen problemas en nuestro código, así que aquí traemos una serie de “truquitos” para intentar evitar quebraderos de cabeza.

Git bisect

Es un comando para cuando tenemos un problema con la versión actual y sabemos que en una versión pasada esa parte del software funcionaba correctamente, localizar el commit que introduce el problema.

Pongamos un ejemplo, estamos en la revisión 213 de nuestro software y uno de los efectos Jquery no funciona, pero sí sabemos que funcionaba la semana pasada, en la revisión 196.
Para buscar el commit que introdujo el fallo podemos hacerlo así:

$ git bisect start
$ git bisect bad [commit/branch/…]
$ git bisect good [commit/brach/…]

Cuando git nos devuelva un chorro de números como b3bfb73e6abbb66259f732976256aaf6 podemos usar algo así como git show b3bfb73e6abbb66259f732976256aaf6 para ver la diferencia.

Lo más molón de todo esto es que con git bisect podemos automatizar la búsqueda. Podemos escribir un test, un script o algo que reproduzca el problema  y git ejecutará el test hasta encontrar el bug.

Más información aquí: https://www.kernel.org/pub/software/scm/git/docs/git-bisect.html y aquí: http://git-scm.com/book/en/Git-Tools-Debugging-with-Git y aquí http://dysfunctionalprogramming.co.uk/blog/2013/08/19/cut-my-frog-into-pieces/

Git Stash

Vamos con otro caso, imaginemos que estamos trabajando en una nueva feature que no está acabada y nos avisan de que hay un error que debemos subsanar ya. ¿Perdemos los cambios y vamos a una versión estable? ¿Modificamos el fichero donde está el error con cuidado de no subir algo que no debemos? ¿Qué hacemos? ¿Qué hacemos con el trabajo a medias?

En git existe un comando llamado git stash. Con este comando podemos congelar los cambios a los que todavía no he hecho commit.

Ejemplo:

Estamos trabajando en algo y hemos modificado algunos archivos.

$ git status
$ git stash
$ git status

Al hacer git stash vemos que hemos congelado los cambios y tenemos el repositorio limpio para resolver el error. Para volver al estado anterior, es decir para descongelar los archivos utilizamos git stash list

Para más información aquí: http://git-scm.com/book/en/Git-Tools-Stashing

Bola extra

Hace tiempo vi un video genial de una GUI para trabajar con ramas, os dejo el video de Youtube y el repositorio git https://github.com/FredrikNoren/ungit

Anuncios

Cheat sheet sobre git-flow: Chuleta/Resumen

Ya hemos hablado de gitflow en otras ocasiones. Ahora me gustaría comentar un pequeño resumen que he encontrado aquí http://danielkummer.github.com/git-flow-cheatsheet/ y que he traducido libremente. el chearsheet de daniel es mucho más colorido, yo he optado por crear uno en pdf que se puede imprimir. Tened cuidado con eso de imprimir porque al final os pasa como a mí y los papeles se esconden cada vez que voy a buscarlos 😉

Para recordar un poco Gitflow Es una extensión para git que ayuda a usar la metodología “una rama por tarea” con git

Seguir leyendo “Cheat sheet sobre git-flow: Chuleta/Resumen”

Consejos y trucos en Git

Todos alguna vez la hemos liado con Git, un commit mal hecho, un mensaje de commit con faltas de ortografía, o cualquier cosa peor. Aquí intento recoger algunos trucos sobre git. Los trucos los he sacado sobre todo de esta página http://boso.herokuapp.com/git, en la que se recopilan las mejores preguntas de StackOverFlow organizadas por temas.

¿Cómo reeditar un mensaje de commit en Git?

¿No os ha pasado nunca el hacer un commit con un comentario erróneo? Si a veces pasa, tienes ganas de subir los cambios y no te das cuenta de lo que estas escribiendo. Para volver atrás y reescribir el ultimo comentario tenemos:

Seguir leyendo “Consejos y trucos en Git”

Gestión de contraseñas en el repositorio de código

El otro día me topé con un post interesante de John Resig (creador de la biblioteca JQuery). así que he decidido compartirlo un poco.

¿Cómo gestionar las contraseñas en el repositorio de código?

Normalmente lo que se hace es crear un archivo de configuración en blanco, por ejemplo conf/sample-setting.json que tiene una estructura básica pero ningún dato confidencial.

Seguir leyendo “Gestión de contraseñas en el repositorio de código”

Git-flow primeros pasos

GitFlow

Hace unos días publiqué una entrada sobre “una buena manera de afrontar la ramificación utilizando Git. Un comentario del blog de Jorge Jiménez (@jorgejiro) me recordó git-flow y ahora voy a intentar realizar una pequeña introducción a este hack.

¿Qué es git-flow?

Es una colección de extensiones para Git que proveen e unas serie de operaciones de alto nivel para utilizar un repositorio Git de manera más fácil.

Para entender mejor como empezar con git-flow lo mejor he encontrado este post http://jeffkreeftmeijer.com/2010/why-arent-you-using-git-flow/ (INGLÉS). Intentaré traducirlo:

Seguir leyendo “Git-flow primeros pasos”

Una buena manera de afrontar la ramificación (branching) en Git

Este post es una traducción libre de http://nvie.com/posts/a-successful-git-branching-model/ en el que voy a contar una manera de trabajar con proyectos, Repositorios de código distribuidos (git) y ramas. Todo esto viene a que hace un tiempo encontré por barrapunto esta discusión y encontré este post que ahora traduzco.

Estrategia de ramificiación y administración de versiones

¿por qué Git?

Existen en internet multitud de discusiones sobre los post y contras de Git, por ejemplo esta. Git da a los desarrolladores una nueva forma de pensar en fusión y ramificación. Desde CVS/Subversión siempre he tenido un poco de miedo por las bifurcaciones, sobre todo con los conflictos al mezclar (merge) ¡Los merges muerden!

Seguir leyendo “Una buena manera de afrontar la ramificación (branching) en Git”

Introducción a GIT

Vamos a empezar con un poco de introducción. El control de versiones es un sistema que registra los cambios realizados sobre un archivo o conjunto de archivos a lo largo del tiempo, de modo que puedas recuperar versiones específicas más adelante.

Existen diferentes modos de enfocar el control de versiones, las más populares son un repositorio centralizado (SVN) o un repositorio distribuido (Git).

Repositorio centralizado

Esto es un lugar donde se almacena el proyecto en su totalidad. Así los clientes se conectan al repositorio central y pueden descargar el código o hacer commits (enviar sus cambios) hacia él.

Seguir leyendo “Introducción a GIT”