sábado, 3 de noviembre de 2012

Mini-manual basico de Git

Actualmente trabajo de administrador de sistemas y durante estos años he programado muy poco y en raras ocasiones. De mi época de programador tengo la costumbre de utilizar sistemas de control de versiones cuando tengo que picar código, por pequeño que sea lo que voy a programar. Me ayuda a centrarme en un pequeño sub-problema, resolverlo bien, y me facilita retroceder sobre mis pasos si no me gustan los últimos cambios que he hecho y quiero descartarlos.

Aunque personalmente me siento mas cómodo con Bazaar porque estuve varios años trabajando con Subversion y pasar del uno al otro me pareció trivial, lo cierto es que Git está mucho más extendido (gracias a GitHub) y conviene saber manejarlo.

Referencias

Para información completa y más avanzada sobre el uso de Git:
Y por supuesto, en la ayuda de Git
$ git help

Bases de Git

Git es un sistema de control de versiones distribuido, lo que significa que el cliente guarda una copia completa del repositorio del servidor. También puede usarse en un solo directorio en modo stand-alone, que es como vamos a explicar en este mini-manual.

El repositorio es una secuencias de instantáneas (snapshots) de los ficheros de un directorio con una serie de metadatos que permiten saber quien y cuando ha hecho las modificaciones entre instantáneas.

El directorio de trabajo es el directorio del sistema de ficheros donde trabajamos creando, borrando o modificando ficheros. Tiene una copia de los ficheros de una instantánea concreta (generalmente la última) del repositorio. Los ficheros modificados se mandan al índice antes de ser enviados al repositorio.

El índice o staging area es una instantánea de los ficheros del directorio de trabajo, que todavía no se ha enviado al repositorio. Todas las modificaciones guardadas en el índice se mandan juntas al repositorio al hacer commit, junto con los metadatos.


Configurar Git

Git almacena la configuración global del usuario en ~/.gitconfig, y es la que se modifica al añadir la opción --global. La configuración especifica para un repositorio está en .git/config.

Configurar el nombre y el e-mail para los commits
$ git config --global user.name "Nombre Apellido"
$ git config --global user.email username@example.com
Activar el coloreado del texto mostrado en algunos comandos
$ git config --global color.ui True
Configurar el editor de texto que se utiliza en algunos comandos
$ git config --global core.editor vim
Listar las opciones de configuración
$ git config --list
Editar el fichero de configuración del repositorio y el global respectivamente
$ git config --edit
$ git config --global --edit

Los ficheros .gitignore y .git/info/exclude tienen una lista de los ficheros que son ignorados del directorio de trabajo. El primero puede añadirse en el propio repositorio y se propaga en las copias (clones) que se hagan.

Crear los repositorios

Para empezar a trabajar hace falta tener un repositorio. Si empezamos a trabajar desde cero, podemos utilizar un directorio vacío y crear un nuevo repositorio en el, o para trabajar en un proyecto que ya existe podemos clonar el repositorio del proyecto para tener nuestro propio repositorio.

Crear un nuevo repositorio en el directorio actual o el especificado
$ git init [directorio]
Crear un repositorio como copia de otro
$ git clone <url> [directorio]


Directorio de trabajo

Para ver el estado del directorio de trabajo y algunas pistas sobre lo que podemos hacer con Git
$ git status
Añadir nuevos ficheros y modificaciones al índice
$ git add <ficheros>
Borrar ficheros
$ git rm <ficheros>          #Borrar del índice y del directorio de trabajo
$ git rm --cached <ficheros> #Borrar solo del índice
Renombrar un fichero
$ git mv <fichero> <nuevofichero> #Equivalente a la siguiente secuencia

$ git rm --cached <fichero>       #Borrar del índice
$ mv <fichero> <nuevofichero>     #Renombrar en el sistema de ficheros
$ git add <nuevofichero>          #Añadir al índice
Convertir el staging area en la ultima instantánea (commit)
$ git commit -m "mensaje"
Deshacer los cambios
$ git reset <fichero>    #Descarta las modificaciones guardadas en el índice
$ git checkout <fichero> #Descarta las modificaciones del directorio de trabajo
Reemplazar el último commit por el staging area actual. También reemplaza el comentario.
$ git commit --amend -m "nuevo mensaje"
Mostrar las modificaciones
$ git diff           #Diferencias entre el directorio de trabajo y el índice
$ git diff --cached  #Diferencias entre el índice y el último commit

Logs

Mostrar un histórico de los commits
$ git log
Hay muchas formas de mostrar los logs (ver git help log)
$ git log -p       #muestra diffs entre commits
$ git log --stat   #indica el número de lineas modificadas
$ git log --graph  #muestra un grafo de las modificaciones
$ git log -<n>     # solo muestra los ultimas n commits
$ git log --pretty=[oneline|short|full|fuller]

No hay comentarios:

Publicar un comentario