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
- .git/config
- ~/.gitconfig
- /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,493