Benito Serna Tips and tools for Ruby on Rails developers

Guía para empezar a usar Git

February 18, 2015

Esta es una pequeña guía aprenderas lo suficiente de git para integrarte a tu equipo de desarrollo.

¿Que es git?

Git es un sistema de control de versión para guardar los cambios en archivos de computadora y coordinar el trabajo de multiples personas en esos archivos [1].

Se usa principalmente para llevar el control del código en el desarrollo de software, pero realmente puede ser usado en cualquier tipo de archivo de computadora.

Eso quiere decir que git nos ayuda a trabajar en equipo en la misma base de código, sin tener que estar en la misma computadora o en el mismo lugar.

¿Que hace diferente a git de otros sistemas de control de versión?

La principal diferencia entre git y la mayoría de los otros sistemas de control de versión, es que los otros sistemas almacenan la información como una lista de cambios en los archivos. Algo similar a la siguiente imagen que muestra un conjunto de archivos y los cambios echos a esos archivos en el tiempo [2].

deltas

En cambio git maneja la información como una serie de “snapshots” o copias de un “mini” sistema de archivos. Cada que guardas el estado de tu proyecto git lo que hace es guardar una copia de tus archivos en ese momento. Para ser eficiente, si un archivo no fue modificado en lugar de copiarlo de nuevo, guarda un enlace a la copia anterior que ya había guardado [2].

snapshots

Esto hace a git algo más parecido a un “mini” sistema de archivos con algunas herramientas increibles construidas en base a él, que a un sistema de control de version convencional [2].

Instalar git

Hay muchas guías para instalar git, puedes usar esta: http://git-scm.com/book/en/v2/Getting-Started-Installing-Git

Iniciar un proyecto

Suponiendo que tu proyecto se llama “miproyecto”

$ mkdir miproyecto
$ cd miproyecto
$ git init
$ git add README.text
$ git commit -m "Initial commit"
$ git remote add origin git@github.com:bhserna/asdf.git
$ git push -u origin master

Unirte a un proyecto ya existente

Imagina que alguien ya creo el proyecto “miproyecto” y vas a empezar a colaborar. Lo primero que tienes que hacer es bajar el repositorio a tu maquina. Para eso sigues los siguientes pasos:

$ git clone git@github.com:bhserna/miproyecto.git

Agregar/modificar algo en un proyecto.

Para este entonces el proyecto “miproyecto” ya esta en github y en tu máquina, esto es lo que tienes que hacer para agregar una modificación (asumiendo que alguien más del equipo es el que aceptará los cambios).

Nota: Esto es una forma de hacer el github flow. Si quieres saber más puedes visitar la guia de github

$ git checkout master
$ git pull origin -p
$ git checkout -b add-title
$ git add README.text
$ git commit -m "adds title to the README file"
$ git push origin add-title

Agregar más cambios a un pull request

Suponiendo que hiciste algunos cambios y creaste un pull request para que alguien más lo aceptara, pero el te dice que antes de unir a master necesitas hacer unos cambios más. Esto es lo que debes de hacer.

$ git checkout add-title
$ git add README.text
$ git commit -m "some changes in README
$ git push origin add-title

Aceptar un pull request

Cuando otro compañero hizo un cambio en el proyecto y a ti te toca integrar su pull request al branch master.

Si crees que todo esta bien

Si los cambios no son suficientes o crees que no pueden ser agregados

Si github no te permite hacer el marge directamente ya que no aparece el botón para hacer la integracion. Es probable que sea porque git encuentró conflictos que no puede resolver entre el branch actual y master. Para esto tendrás que decirle a tu compañero que resuelva los conflictos con master para que tu puedas integrarlo.

Nota: tú podrías resolver los conflictos, pero normalmente le sería más fácil a la persona que hizo los cambios a integrar.

Resolver conflictos con master

Algunas veces cuando haces un pull request o durante el tiempo en que desarrollaste los cambios en tu branch, fueron agregados cambios en master que tienen conflictos con los cambios que tu estas haciendo. De esto te darás cuenta cuando al hacer el pull request, github te dice que no pude integrar tus cambios a master.

Cuando pasa esto el indicado para resolver esos conflictos eres tú. Y lo que tienes que hacer es lo siguiente:

$ git checkout master
$ git pull origin
$ git checkout add-title
$ git merge master --no-ff
CONFLICT (content): Merge conflict in README.text
Automatic merge failed; fix conflicts and then commit the result.

Verás algo como lo siguiente

<<<<<<< HEAD

Pi es igual a 3.14

=======

Pi es igual a 3.1416

>>>>>>> master

Git pone <<<<<<< HEAD para empezar a mostrar lo que hay en el branch en el que tú estas trabajando y pone ======= para mostrar el final y comenzar a mostrar lo que hay en el branch master y al final pone >>>>>>> master para indicar que ahí termino el conflicto.

Con eso tu puedes tomar la decisión de dejar lo que mas convenga para tu proyecto, por ejemplo:

Pi es igual a 3 =)
$ git add README.text
$ git commit
$ git push origin add-title

Actualizar el branch en el que estoy trabajando

Algunas veces hay dos o más personas trabajando en un mismo branch o alguien del equipo agrego un pequeño cambio en el branch que estabas trabajando. Para poder llevar esos cambios a tu computadora, has lo siguiente:

$ git checkout mi-super-branch
$ git pull origin mi-super-branch

Referencias

  1. https://en.wikipedia.org/wiki/Git
  2. https://git-scm.com/book/en/v2

Weekly tips and tools for Ruby on Rails developers

I send an email each week, trying to share knowledge and fixes to common problems and struggles for ruby on rails developers, like How to fetch the latest-N-of-each record or How to test that an specific mail was sent or a Capybara cheatsheet. You can see more examples on Most recent posts or All post by topic.