Git y Github

A menos que tengas un buen motivo, deberías estar utilizando git y GitHub para el control de versiones.

Recursos sobre Git

Si no sabes sobre git o no lo has usado en equipo, ¡no temas!. Existe una gran cantidad de sitios maravillosos para que te inicies con git. Nosotros recomendamos:

  • Help.Github te puede ayudar a arrancar con git sin importar qué sistema operativo uses. Si no has usado GitHub antes, este es el curso perfecto. También contiene buena información sobre git como tal.
  • Pro Git es probablemente el mejor recurso sobre git que existe. Cubre practicamente todo lo que puedes llegar a necesitar, por lo que es ciertamente extenso. Sin embargo, es una excelente lectura para llegar a conocer los aspectos básicos o para usar como referencia. Pro Git es escrito por uno de los desarrolladores de GitHub.
  • Hay una lista de recursos sobre git en StackOverflow que contiene herramientas, tutoriales, guías de referencia, entre otros.

La próxima vez que comiences un proyecto, ¡usa git/GitHub!. Trabajar en algo por tu cuenta es diferente a trabajar con otros, pero comenzar con los comandos básicos de git (clone, branch, merge) hará que las cosas más avanzadas (múltiples orígenes, rebasing, ...) tengan más sentido.

Prácticas de uso de Git en Mozilla

  • Lee sobre el modelo de git-flow. En Mozilla se trabaja de manera similar, exceptuando el uso de master como rama de desarrollo, prod como rama de producción, y bug-$BUG_NUMBER como ramas de funcionalidades. Una vez conoces git, entender como manejar las ramas de manera eficiente permitirá mantener correcciones de errores y características diferentes en sus propuas ramas. Esto es realmente maravilloso, ¡especialmente en casos de regresiones!.
  • Usamos git submodule para nuestras librerías. El artículo sobre git submodules explicados te ayudará a entender cómo funcionan.
  • Frecuentemente usamos git rebase para combinar y corregir commits antes de mezclarlos con los repositorios originales. Esto ayuda a mantener la historia del repositorio limpia y a mejorar las revisiones de código. GitHub tiene un buen artículo sobre rebase.

github.com/mozillahispano

Los nuevos proyectos para Mozilla Hispano deberían iniciarse en la cuenta de Mozilla Hispano.

Contacta a Nukeador si deseas añadir un proyecto. Normalmente lo puedes encontrar en el canal #mozilla-hispano en IRC.

Trabajando en algún proyecto

Para trabajar en un proyecto existente:

  • Haz un fork en tu cuenta
  • Crea una rama para tu trabajo
  • Envía un pull request para revisión
  • Mezcla tu commit con master, que debería estar configurada para seguir origin/master
  • git push
  • Coloca un enlace al commit en el Bug o Issue relevante

Mensajes de Commit

  • Sigue estos lineamientos
  • Debería contener un resumen de 50 caracteres, con los detalles necesarios debajo
  • Si se trata de un bug o issue, debería contener bug 1234 en el resumen.

Manteniento master sincronizado

Seguramente querrás mantener tu rama master local sincronizada. Típicamente harás un rebase de tus ramas con tu master para luego enviar (push) tus cambios a origin/master.

Vamos a asumir que has definido tu remota origin de la manera correcta en GitHub. Por ejemplo, para Zamboni.

origin      git@github.com:jbalogh/zamboni.git

Tu archivo .gitconfig debería entonces contener lo siguiente:

[branch "master"]
    remote = jbalogh
    merge = master
    rebase = true

Haciendo la vida más fácil

Herramientas para Git

shell

Hay un repositorio de herramientas para git llamado git-tools que nos pueden facilitar la vida. Este contiene scripts de shell y Python que hacen cualquier tipo de magia.

Como muestra:

  • git here te permite saber cuál es la rama actual.
  • git compare con las opciones apropiadas en git.config te dará una URL de comparación en GitHub para tu rama, que permite observar las diferencias de los cambios que ya han sido enviados.
  • git url con las opciones correctas en git.config te devolverá la URL al último commit en GitHub.

Coloca estas herramientas en tu path y luego haz un fork y crea tus propias herramientas para compartir.

vim

fugitive.vim puede ser la mejor herramienta para Git y Vim de todos los tiempos.

Oh My Zsh

Oh My Zsh es una colección excelente de scripts de zshell que pueden hacer que tu ambiente de zsh sea maravilloso. Comprende una colleción de plugins, incluyendo algunos para git y GitHub.

Algunos de esos se solapan con git-tools. Adicionalmente, al usar Oh My Zsh puedes ver fácilmente la rama actual y su estado en el prompt.

Por ejemplo:

dash@awesomepants in ~/Projects/bootcamp/the_code/docs
(bootcamp) ±                                                    on master!

Donde:

  • bootcamp es el virtualenv activo.
  • ± significa que estoy en un repositorio git.
  • master es la rama actual.
  • ! indica que hay cambios sin enviar en la rama actual.

Viendo código de otras personas

En algunas ocasiones vas a tener que probar código de otras personas localmente. Si tienes un pull request o un commit de la otra persona, esto es lo que debes hacer para ver su código:

git remote add otro git@github.com:otro/repo.git
git fetch otro
git co otro/rama

Nota

  • otro es la otra persona.
  • La primera línea define una remota. Una remota no es más que un alias para un repositorio.
  • La segunda línea descarga todos los commits de otro que aún no tienes localmente. Normalmente esto son solo commits, pero en teoría puede ser cualquier cosa.
  • En la tercera línea se hace un cambio a la rama de otro. Si tienes el hash de un commit, puedes hacer git co $COMMIT_HASH.