GIT y Manejo de Versiones

Marta Solano G.

¿Qué es un manejador de versiones?

Sistema de control de versiones local

Sistema de control de versiones centralizado

Sistema de control de versiones distribuido

Importancia

Permite revertir archivos a un estado anterior, revertir el proyecto entero a un estado anterior, comparar cambios a lo largo del tiempo, ver quién modificó por última vez algo que puede estar causando un problema, quién introdujo un error y cuándo, y mucho más.

 

Usar un  controlador de versiones también significa, generalmente, que si algo se fastidia o se pierden archivos, pueden ser recuperados fácilmente. 

Fundamentos de GIT

Otros

Instalación

LINUX

$ apt-get install git

 $ yum install git-core

MAC

  • http://code.google.com/p/git-osx-installer
  • $ sudo port install git-core +svn +doc +bash_completion +gitweb

WINDOWS

http://msysgit.github.com/

Configuración Inicial

Archivos Involucrados

  1. .git/config
  2. ~/.gitconfig
  3. /etc/gitconfig

Identidad

  • $ git config --global user.name "John Doe"
  • $ git config --global user.email john@exp.com

Editor

  • $ git config --global core.editor emacs
    • Emacs, nano, vi, vim, gedit, etc

Herramienta de diferencias

  • $ git config --global merge.tool vimdiff
    • kdiff3, tkdiff, meld, xxdiff, emerge, vimdiff, gvimdiff, ecmerge y opendiff 

Obtener Ayuda

  • $ git help <comando>
  • $ git <comando> --help
  • $ man git-<comando>

git help config

Ejemplo

canales #git o #github del servidor de IRC Freenode (irc.freenode.net). 

Obtener un Repositorio

Directorio Existente

$ git init

Clonar Repositorio Existente

$ git clone <url repositorio>

$ git clone git://github.com/schacon/grit.git

Traer Archivos

  • $ git pull
  • $ git checkout <ruta del archivo>

  $ git checkout

docs/instalación.txt

Añadir archivos al Repositorio

Añadir Archivos

$git add <nombre del archivo>

Comprobar estado

$git status

Archivos modificados

Igual que el agregar nuevo

  • $ git add README
  • $ git add *.py
  • $ git add src/
  • $ git add README

Ciclo de Vida de un Archivo

Ignorar Archivos

Archivo .gitignore

Usa patrones glob

Confirmar Cambios

  • $ git commit 
  • $ git commit -m “<Mensaje explicando cambios>”
  • $ git commit -a

Añade al commit todos los archivos modificados

Eliminar Archivos

Eliminar completamente 

$git rm <archivo a eliminar>

  • $ git rm archivo.txt
  • $ git rm log/\*.log
  • $ git rm carpeta/

Eliminar del área de preparación

$ git rm --cached readme.txt

Mover archivos

$ git mv <file_from> <file_to>

Deshacer Cambios

Cambiar mensaje de commit

$ git commit --amend

Archivos  preparados (git add...)

$ git reset HEAD <ruta archivo>

Archivos modificados

$ git checkout -- <ruta archivo>

Eliminar commit

$ git checkout <id_commit_anterior>

Hace modificaciones y luego un nuevo commit

Ramas (Branches)

Repositorio con un commit

Repositorio múltiples commits

Crear y Cambiar de Rama

  • $ git branch testing
  • $ git checkout testing
  • $ git commit -m ¨En testing¨
  • $ git checkout master
  • $ git commit -m “En master”

HEAD apunta a la rama actual

$ git checkout -b nuevaRama  
Crea una nueva rama y se pasa a ella

Unir Ramas

  • $ git checkout master
  • $ git merge iss53

El merge crea automáticamente un commit que contiene la información del merge

El merge se hace recursivamente

Manejando conflictos

<<<<<<< HEAD
<div id="footer">contact : email.support@github.com</div>
=======
<div id="footer">
  please contact us at support@github.com
</div>
>>>>>>> iss53

Nos dice que la versión en HEAD (la rama 'master', la que se activó antes de lanzar el comando de unión), contiene lo indicado en la parte superior del bloque (todo lo que está encima de '=======').  Y que la versión en 'iss53' contiene el resto, lo indicado en la parte inferior del bloque

Flujos de trabajo ramificados

Ramas de largo recorrido

Ramas puntuales (temas)

Git-flow: http://nvie.com/posts/a-successful-git-branching-model/

Ramas Remotas

Obteniendo 

$ git fetch origin
$ git pull origin master
$ git pull

 

Guardando

Primero hacer commit 

$ git push origin <local>:<remoto> (1º vez)
$ git push origin <remoto> (branch ya creado remoto)

Eliminar Ramas

$ git branch -d <nombre branch>
 

$ git push origin :<nombre branch server>

Es decir ponga un branch vacío ahí

Nunca hacer:
$ rm directorio_branch/

Localmente

Remoto

Importante:  Aquí va un espacio en blanco

Sitos Públicos para hospedar repositorios GIT

Más información en: 

https://git.wiki.kernel.org/index.php/GitHosting

Más información

  • http://git-scm.com/book/en/  
  • http://git-scm.com/book/es/
  • http://nvie.com/posts/a-successful-git-branching-model/
  • Solo buscar Git en Google 

¿Preguntas?

GIT

By Marta Solano

GIT

Breve introducción al uso y funcionamiento del manejador de versiones GIT. Realizada para una charla en el FSD 2014.

  • 1,478