Post on 03-Aug-2020
Jesús Rodríguez Villalobos
1
UNIVERSIDAD DE ALMERÍA
AMPLIACIÓN DE INGENIERÍA DEL SOFTWARE
Jesús Rodríguez Villalobos
Curso académico 2013-14
5º Ingeniería Informática
Universidad de Almería
Jesús Rodríguez Villalobos
2
1. Capítulo 1: INTRODUCCIÓN
1.1 Acerca del control de versiones
1.2 Una breve historia de GIT
1.3 Fundamentos de GIT
1.4 Instalando GIT
1.5 Configurando GIT por primera vez
2. Capítulo 2: FUNDAMENTOS DE GIT
2.1 Obteniendo un repositorio GIT
2.2 Guardando cambios en el repositorio
2.3 Viendo el histórico de confirmaciones
2.4 Deshaciendo cosas
3. Capítulo 3:Git en un servidor
3.1 Crearnos una cuenta en github
3.2 Establecer relación entre ordenador y github
3.3 Crearnos un repositorio en github
3.4 Conectar repositorio local con repositorio github
4. Bibliografía
Jesús Rodríguez Villalobos
3
1. Capítulo 1: INTRODUCCIÓN
Git es un software de control de versiones diseñado por Linus Torvalds, pensando en la
eficiencia y la confiabilidad del mantenimiento de versiones de aplicaciones cuando estas
tienen un gran número de archivos de código fuente.
1.1 Acerca del control de versiones
Un sistema de control de versiones trata de un sistema que registra todos los cambios
realizados sobre un archivo o conjunto de archivos a lo largo del tiempo, de modo que
podemos recuperar cualquier versión específica más adelante. El control de versiones
se puede realizar tanto para versiones de código fuente como para casi cualquier tipo
de archivo.
Tenemos diferentes sistemas de control de versiones:
- Sistemas de control de versiones locales.
- Sistemas de control de versiones centralizados.
- Sistemas de control de versiones distribuidos.
Como GIT se trata de un sistema de control de versiones distribuido, vamos a tratar un
poco de que trata este sistema de control de versiones.
En un DVCS (Distributed Version Control Systems) cuando el cliente descarga archivos
del repositorio, no sólo descarga la última instantánea de los archivos, también replica
completamente el repositorio. De esta manera, si un servidor muere y hay clientes que
estaban colaborando con él, cualquiera de los repositorios de cualquier cliente puede
copiarse en el servidor para restaurarlo.
Cada vez que se hace una descarga de una instantánea, estaríamos haciendo una copia
de seguridad completa de todos los datos del repositorio.
Jesús Rodríguez Villalobos
4
En muchos de estos sistemas, trabajan con varios repositorios, de forma que
podríamos trabajar con diferentes grupos de gente de forma simultánea dentro del
mismo proyecto, de esta manera podemos decir que tendríamos diferentes flujos de
trabajo que no serían posibles en sistemas centralizados.
1.2 Una breve historia de GIT
En 2005 se produjo la separación entre BitKeeper y la empresa que estaba
desarrollando el núcleo de Linux por dejar de ser gratuita. De esta forma la comunidad
de Linux decidió desarrollar su propia herramienta basada en las lecciones que
aprendieron durante el uso de BitKeeper.
Podemos destacar una serie de características que quisieron tomar como objetivos
base a la hora de desarrollar su propia herramienta:
- Velocidad.
- Diseño sencillo.
- Fuerte apoyo al desarrollo no lineal (ramas).
- Sistema distribuido.
- Capaz de manejar proyectos de gran dimensión.
1.3 Fundamento de GIT
Git almacena y modela la información de forma muy diferente a los demás sistemas de
VCSs, como Subversion y Perforce.
Jesús Rodríguez Villalobos
5
1.3.1 Instantáneas, no diferencias
Forma de almacenar la información los VCS y GIT:
Esta sería la forma de almacenar la información los sistemas VCS Subversion y demás.
Como podemos observar se almacena la información como un conjunto de archivos y
las modificaciones hechas sobra cada uno de ellos a lo largo del tiempo.
Esta sería la forma de almacenar la información los sistemas GIT. Como podemos
observar, GIT almacena los datos como un conjunto de instantáneas. Cuando
confirmamos un cambio, GIT realiza una instantánea del estado de tu proyecto en GIT
y guarda una referencia de dicha foto. Por eficiencia, si no se ha realizado ninguna
modificación, GIT no almacena un archivo nuevo, sino que guarda un enlace al archivo
anterior idéntico al que ya teníamos almacenado.
1.3.2 La mayoría de las operaciones son locales
GIT sólo necesita archivos y recursos locales para operar. Como tenemos toda la
historia del proyecto en nuestro disco local, la mayoría de las operaciones se realizan
de forma muy rápida en comparación con los demás sistemas VCSs.
Jesús Rodríguez Villalobos
6
Ejemplos:
- Para obtener la historia de un proyecto, sólo tendríamos que leer de
nuestra base de datos local.
- Para ver cambios introducidos en la versión actual de un archivo y la versión
de este mismo archivo hace un mes, GIT puede hacer el cálculo de
diferencias localmente.
- Si no tenemos internet, podremos trabajar de forma normal hasta obtener
conexión de internet y subir los nuevos datos.
1.3.3 Integridad
Todo en Git es verificado mediante una suma de comprobación antes de ser
almacenado, de esta forma es imposible cambiar contenidos de cualquier archivo o
directorio sin que GIT lo sepa.
1.3.4 Estados
Los archivos en GIT se pueden encontrar en tres estados diferentes:
- Confirmado: Los datos están almacenados de forma segura en tu base de
datos local.
- Modificado: El archivo ha sido modificado pero no se ha confirmado a tu
base de datos local.
- Preparado: Se trata de marcar un archivo modificado como preparado para
que vaya a la base de datos local en tu próxima confirmación.
En un proyecto de GIT nos encontramos con tres áreas diferentes:
- El directorio de trabajo: Copia de una versión del proyecto.
- El área de preparación: Se trata de un archivo que almacena la información
acerca de lo que va a ir en tu próxima confirmación.
- El directorio de GIT: donde GIT almacena los metadatos y la base de datos
de objetos para tu proyecto.
Jesús Rodríguez Villalobos
7
1.4 Instalando GIT
Para instalar GIT lo podemos hacer de dos formas, desde código fuente o instalar un
paquete existente para tu plataforma.
En nuestro caso lo vamos a instalar en Windows, simplemente tenemos que descargar
el instalador de la siguiente web:
http://code.google.com/p/msysgit
Una vez instalado tenemos la versión de línea de comando.
1.5 Configurando GIT por primera vez
Establecer identidad:
Establecer nombre de usuario y correo electrónico. Esta información es usada por GIT
cuando realizas los commits.
Jesús Rodríguez Villalobos
8
Elegir editor:
Se trata del editor de texto que GIT utilizará si necesita que introduzcas algún mensaje.
Por defecto GIT suele utilizar Vi o Vim aunque también puedes utilizar cualquier otro
como Emacs.
En nuestro caso vamos a utilizar Emacs
Elegir herramienta de diferencias:
Se trata de elegir la herramienta que queremos que GIT utilice para resolver los
conflictos de unión (merge).
Git acepta las siguientes herramientas: kdiff3, tkdiff, meld, xxdif, emerge, vimdiff,
gvimdiff, ecmerge y opendiff.
En nuestro caso vamos a utilizar vimdiff:
Comprobar configuración:
Si queremos ver la configuración que llevamos realizada lo podemos hacer de la
siguiente manera:
Jesús Rodríguez Villalobos
9
2. Capítulo 2: FUNDAMENTOS DE GIT
En este capítulo aprenderemos a configurar e inicializar un repositorio, comenzar y
detener el seguimiento de archivos, y preparar (stage) y confirmar (commit) cambios.
También enseñaremos a configurar Git para que ignore ciertos archivos y patrones,
cómo deshacer errores rápida y fácilmente, cómo navegar por la historia de tu
proyecto y ver cambios entre confirmaciones, y cómo enviar (push) y recibir (pull) de
repositorios remotos.
2.1 Obteniendo un repositorio GIT
Podemos obtener un repositorio de dos formas diferente:
- Cogemos un directorio existente y lo importamos a GIT.
- Clonando un repositorio existente de otro servidor.
2.1.1 Inicializar un repositorio en un directorio existente
Jesús Rodríguez Villalobos
10
Hemos creado una carpeta “Ejemplo1” y con el comando “git init” creamos un
subdirectorio .git que contiene todos los archivos necesarios del repositorio.
Para empezar a controlar versiones de archivos, vamos a crear por ejemplo un
“readme.txt” y mediante el comando “git add” vamos a especificar que archivos
queremos controlar.
2.1.2 Clonar un repositorio existente
Se trata de obtener una copia de un repositorio Git existente, simplemente
utilizaremos el siguiente comando “git clone url”
2.2 Guardando cambios en el repositorio
Cada archivo puede estar en dos estado diferentes, en seguimiento (tracked) o sin
seguimiento (untracked).
Todos los archivos que tienes desde tu última instantánea están en seguimiento
mientras que todos los demás están untracked (cualquier archivo que no estuviese en
tu última instantánea ni está en tu área de preparación).
Cuando clonar un repositorio como hemos hecho nosotros anteriormente, todos los
archivos se encuentran en seguimiento y sin modificaciones.
Una vez clonado un repositorio pasaríamos a modificar archivos, de esta manera GIT
los vería como modificados porque los has cambiado desde tu última confirmación.
Jesús Rodríguez Villalobos
11
Seguidamente se prepararían estos archivos y posteriormente confirmaríamos los
cambios que hemos preparado.
2.2.1 Ver el estado de mis archivos
Para realizar esta operación utilizamos el comando “git status” y vamos a analizarlo un
poco con los siguientes ejemplos:
Nos metemos en el repositorio que acabamos de clonar y realizamos dicho comando.
Podemos observar que tenemos un entorno de trabajo limpio, sin ningún archivo
modificado y por lo tanto no tenemos nada que confirmar.
A continuación, dentro de este mismo proyecto vamos a añadir un readme.txt y
seguidamente vamos a ejecutar el comando “git status”:
Jesús Rodríguez Villalobos
12
Como podemos observar el archivo “readme.txt” no está en seguimiento ya que GIT ve
un archivo que no estaba en la instantánea anterior. Ahora mismo este archivo no
entraría dentro de tus confirmaciones, ya que, antes tendrías que ponerlo como un
archivo en seguimiento que es lo que vamos a hacer en el siguiente punto.
De esta manera podemos observar que GIT no confirma ningún archivo que no esté en
seguimiento haciendo que no puedas confirmar algún archivo que hayas creado
accidentalmente y no quieras confirmarlo.
2.2.2 Seguimiento de un archivo
Esta operación se realiza mediante el comando “git add”, a continuación vamos a
poner en seguimiento nuestro archivo creado “readme.txt” para que cuando hagamos
una confirmación, este archivo entre dentro de ella.
Si realizamos un “git status” podemos observar que nuestro nuevo archivo pasa a estar
en seguimiento y preparado para confirmar.
Si confirmamos ahora, esta será la versión del archivo que se guardará en nuestra
instantánea.
2.2.3 Preparar archivos modificados
Vamos a modificar un archivo que teníamos en seguimiento, a continuación hacemos
un “git status” y tenemos lo siguiente:
Jesús Rodríguez Villalobos
13
Nos dice que el archivo está modificado pero no está actualizado, tendríamos que
hacerle un “git add” y volvería a estar preparado para confirmación.
Ahora tenemos otra vez el archivo preparado para confirmación.
Para tener un comando que nos dé más información sobre los cambios que tenemos,
podemos utilizar el comando “git diff –staged”, con el cual podremos saber hasta la
línea que hemos cambiado en un archivo modificado:
Jesús Rodríguez Villalobos
14
2.2.4 Confirmar cambios
Una vez que tenemos nuestros archivos tal y como queremos y preparados,
pasaríamos a confirmar mediante el comando “git commit”.
2.2.5 Eliminación de un archivo
Para ello utilizamos el comando “git rm nombre_del_archivo”. Después de hacer esto,
hacemos un git status y podemos observar que se encuentra preparado para su
eliminación, tenemos que hacer una confirmación para realizar la eliminación, de esta
manera evitaremos eliminaciones equivocadas por algún error.
Jesús Rodríguez Villalobos
15
2.2.6 Movimiento de archivos
Antes de mover un archivo, tenemos que ver que esté confirmado. Después de esto
simplemente tenemos que ejecutar el siguiente comando “git mv file_origen
file_destino”.
2.3 Ver el histórico de confirmaciones
Para ver el histórico de confirmaciones simplemente tenemos que ejecutar el
comando “git log” , en nuestro caso vamos a ejecutar “git log -2” para ver simplemente
las últimas dos confirmaciones:
2.4 Deshaciendo cosas
Se trata de deshacer cosas que hemos realizado incorrectamente o por equivocación.
A continuación vamos a mostrar varios casos en los que podemos volver atrás sin
problemas, hay que tener cuidado ya que no siempre se puede volver atrás después de
alguna de estas operaciones.
2.4.1 Modificar mi última confirmación
Para ello vamos a crearnos un par de archivos, vamos a preparar uno de ellos y lo
vamos a confirmar. Posteriormente nos acordamos que en esa confirmación
deberíamos haber confirmado el otro archivo también, por tanto, vamos a proceder a
Jesús Rodríguez Villalobos
16
modificar la anterior confirmación mediante el comando “git commit - -amend” como
mostramos a continuación:
2.4.2 Deshaciendo la preparación de un archivo
Vamos a poner en el área de preparación algún archivo y cuando ejecutamos “git
status” vamos a observar que nos proporciona el comando pasar sacar un archivo del
área de preparación con el comando “git reset HEAD archivo”.
Jesús Rodríguez Villalobos
17
2.4.3 Deshacer la modificación de un archivo
Cuando tenemos un archivo en nuestra área de trabajo y realizamos alguna
modificación sobre él, podemos volver a su estado cuando fue confirmado por última
vez con el comando “git checkout archivo”
Jesús Rodríguez Villalobos
18
3. Capítulo 3: GIT EN UN SERVIDOR
Ahora vamos a proceder a alojar nuestro proyecto realizado localmente en github.
Github es un servicio de alojamiento de repositorios de software que ofrece opciones
muy interesantes para trabajar en equipo. Github está basado en Git.
La ventaja de Github es la facilidad de manejo de proyectos, colaboradores y por
supuesto la posibilidad que ofrece para contribuir con aquellos que encontremos más
interesante. Sin duda se ha convertido en un punto de encuentro para los
desarrolladores.
3.1 Crearnos una cuenta en github
Lo primero que tenemos que hacer es entrar en https://github.com y registrarnos. Una
vez registrados procedemos a los siguientes puntos.
3.2 Establecer relación entre ordenador y github
Lo primero que tenemos que hacer es establecer una relación de confianza entre
nuestro ordenador y github, para esto tenemos que generar una SSH Key que le
daremos a github.
Para generar nuestra SSH Key ejecutamos el siguiente comando:
$ ssh-keygen -t rsa -C “tuemail@dominio.com”
3.3 Crear un repositorio en github
Una vez que realizamos la relación de confianza, procedemos a crearnos un repositorio
en github como representamos a continuación:
Jesús Rodríguez Villalobos
19
3.4 Conectar repositorio local con repositorio github
Una vez que tenemos nuestro repositorio creado en github, pasamos a conectar
nuestro repositorio local con nuestro repositorio ubicado en github:
$ git remote add origin
git@github.com:jesusrodriguez/prueba.git
Ahora solo nos queda volcar la información de nuestro repositorio local en nuestro
repositorio de github.
$ git push origin master
4. Bibliografía
http://dreyacosta.com/comandos-basicos-para-manejarse-con-git-y-github/
http://librosweb.es/pro_git/
https://mejorando.la/videos/curso-de-introduccion-git-y-github/
http://techtastico.com/post/introduccion-git/
http://training.github.com/
http://blog.marcoscrispino.com/2011/06/subversion-vs-git.html
http://git-scm.com/