universidad de almerÍa ampliaciÓn de ingenierÍa del … · 1.3.1 instantáneas, no diferencias...

19
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

Upload: others

Post on 03-Aug-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: UNIVERSIDAD DE ALMERÍA AMPLIACIÓN DE INGENIERÍA DEL … · 1.3.1 Instantáneas, no diferencias Forma de almacenar la información los VCS y GIT: Esta sería la forma de almacenar

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

Page 2: UNIVERSIDAD DE ALMERÍA AMPLIACIÓN DE INGENIERÍA DEL … · 1.3.1 Instantáneas, no diferencias Forma de almacenar la información los VCS y GIT: Esta sería la forma de almacenar

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

Page 3: UNIVERSIDAD DE ALMERÍA AMPLIACIÓN DE INGENIERÍA DEL … · 1.3.1 Instantáneas, no diferencias Forma de almacenar la información los VCS y GIT: Esta sería la forma de almacenar

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.

Page 4: UNIVERSIDAD DE ALMERÍA AMPLIACIÓN DE INGENIERÍA DEL … · 1.3.1 Instantáneas, no diferencias Forma de almacenar la información los VCS y GIT: Esta sería la forma de almacenar

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.

Page 5: UNIVERSIDAD DE ALMERÍA AMPLIACIÓN DE INGENIERÍA DEL … · 1.3.1 Instantáneas, no diferencias Forma de almacenar la información los VCS y GIT: Esta sería la forma de almacenar

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.

Page 6: UNIVERSIDAD DE ALMERÍA AMPLIACIÓN DE INGENIERÍA DEL … · 1.3.1 Instantáneas, no diferencias Forma de almacenar la información los VCS y GIT: Esta sería la forma de almacenar

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.

Page 7: UNIVERSIDAD DE ALMERÍA AMPLIACIÓN DE INGENIERÍA DEL … · 1.3.1 Instantáneas, no diferencias Forma de almacenar la información los VCS y GIT: Esta sería la forma de almacenar

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.

Page 8: UNIVERSIDAD DE ALMERÍA AMPLIACIÓN DE INGENIERÍA DEL … · 1.3.1 Instantáneas, no diferencias Forma de almacenar la información los VCS y GIT: Esta sería la forma de almacenar

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:

Page 9: UNIVERSIDAD DE ALMERÍA AMPLIACIÓN DE INGENIERÍA DEL … · 1.3.1 Instantáneas, no diferencias Forma de almacenar la información los VCS y GIT: Esta sería la forma de almacenar

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

Page 10: UNIVERSIDAD DE ALMERÍA AMPLIACIÓN DE INGENIERÍA DEL … · 1.3.1 Instantáneas, no diferencias Forma de almacenar la información los VCS y GIT: Esta sería la forma de almacenar

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.

Page 11: UNIVERSIDAD DE ALMERÍA AMPLIACIÓN DE INGENIERÍA DEL … · 1.3.1 Instantáneas, no diferencias Forma de almacenar la información los VCS y GIT: Esta sería la forma de almacenar

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”:

Page 12: UNIVERSIDAD DE ALMERÍA AMPLIACIÓN DE INGENIERÍA DEL … · 1.3.1 Instantáneas, no diferencias Forma de almacenar la información los VCS y GIT: Esta sería la forma de almacenar

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:

Page 13: UNIVERSIDAD DE ALMERÍA AMPLIACIÓN DE INGENIERÍA DEL … · 1.3.1 Instantáneas, no diferencias Forma de almacenar la información los VCS y GIT: Esta sería la forma de almacenar

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:

Page 14: UNIVERSIDAD DE ALMERÍA AMPLIACIÓN DE INGENIERÍA DEL … · 1.3.1 Instantáneas, no diferencias Forma de almacenar la información los VCS y GIT: Esta sería la forma de almacenar

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.

Page 15: UNIVERSIDAD DE ALMERÍA AMPLIACIÓN DE INGENIERÍA DEL … · 1.3.1 Instantáneas, no diferencias Forma de almacenar la información los VCS y GIT: Esta sería la forma de almacenar

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

Page 16: UNIVERSIDAD DE ALMERÍA AMPLIACIÓN DE INGENIERÍA DEL … · 1.3.1 Instantáneas, no diferencias Forma de almacenar la información los VCS y GIT: Esta sería la forma de almacenar

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”.

Page 17: UNIVERSIDAD DE ALMERÍA AMPLIACIÓN DE INGENIERÍA DEL … · 1.3.1 Instantáneas, no diferencias Forma de almacenar la información los VCS y GIT: Esta sería la forma de almacenar

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”

Page 18: UNIVERSIDAD DE ALMERÍA AMPLIACIÓN DE INGENIERÍA DEL … · 1.3.1 Instantáneas, no diferencias Forma de almacenar la información los VCS y GIT: Esta sería la forma de almacenar

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 “[email protected]

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:

Page 19: UNIVERSIDAD DE ALMERÍA AMPLIACIÓN DE INGENIERÍA DEL … · 1.3.1 Instantáneas, no diferencias Forma de almacenar la información los VCS y GIT: Esta sería la forma de almacenar

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

[email protected]: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/