SlideShare una empresa de Scribd logo
Programación de Sistemas IFCT0609
Profesor: Manel Montero
Programación de Sistemas IFCT0609 – Sistemas de Gestión IFCD0211
Profesor: Manel
Montero
INDICE
Programación de Sistemas IFCT0609
• Sistemas de Control de Versiones
Profesor: Manel
Control de Versiones
Programación de Sistemas IFCT0609
¿Qué es el control de versiones?
El control de versiones es un sistema que registra los
cambios realizados sobre un archivo o conjunto de
archivos a lo largo del tiempo, de modo que puedas
recuperar versiones específicas más adelante.
Profesor: Manel
Introducción
Control de Versiones
Programación de Sistemas IFCT0609
Cualquier tipo de archivo que encuentres en un
ordenador puede ponerse bajo control de versiones
Profesor: Manel
Introducción
Control de Versiones
Programación de Sistemas IFCT0609
Si eres diseñador gráfico o web, y quieres mantener cada
versión de una imagen o diseño (algo que sin duda quieres),
un sistema de control de versiones (Version Control System o
VCS en inglés) es una elección muy sabia.
Profesor: Manel
Introducción
Control de Versiones
Programación de Sistemas IFCT0609
Te 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.
Profesor: Manel
Introducción
Control de Versiones
Programación de Sistemas IFCT0609
Usar un VCS también significa generalmente que si fastidias o
pierdes archivos, puedes recuperarlos fácilmente.
Además, obtienes todos estos beneficios a un coste muy bajo.
Profesor: Manel
Introducción
Control de Versiones
Programación de Sistemas IFCT0609
Un método de control de versiones usado por mucha gente es
copiar los archivos a otro directorio (quizás indicando la fecha
y hora en que lo hicieron, si son avispados).
Este enfoque es muy común porque es muy simple, pero
también tremendamente propenso a errores.
Profesor: Manel
LOS METODOS DE LA GENTE…
Control de Versiones
Programación de Sistemas IFCT0609
Es fácil olvidar en qué directorio te encuentras, y guardar
accidentalmente en el archivo equivocado o sobrescribir
archivos que no querías.
Profesor: Manel
LOS METODOS DE LA GENTE…
Control de Versiones
Programación de Sistemas IFCT0609
Para hacer frente a este problema, los programadores
desarrollaron hace tiempo VCSs locales que contenían una
simple base de datos en la que se llevaba registro de todos los
cambios realizados sobre los archivos.
Profesor: Manel
LOS METODOS DE LA GENTE…
Control de Versiones
Programación de Sistemas IFCT0609
El siguiente gran problema que se encuentra la gente es que
necesitan colaborar con desarrolladores en otros sistemas. Para
solventar este problema, se desarrollaron los sistemas de
control de versiones centralizados (Centralized Version Control
Systems o CVCSs en inglés).
Profesor: Manel
Sistemas de Control de Versiones Centralizados
Control de Versiones
Programación de Sistemas IFCT0609
Estos sistemas, como CVS y Subversion tienen un único
servidor que contiene todos los archivos versionados, y varios
clientes que descargan los archivos desde ese lugar central.
Durante muchos años éste ha sido el estándar para el control
de versiones
Profesor: Manel
Sistemas de Control de Versiones Centralizados
Control de Versiones
Programación de Sistemas IFCT0609
Profesor: Manel
Montero
Sistemas de Control de Versiones Centralizados
Control de Versiones
Programación de Sistemas IFCT0609
Sin embargo, esta configuración también tiene serias
desventajas. La más obvia es el punto único de fallo que
representa el servidor centralizado. Si ese servidor se cae
durante una hora, entonces durante esa hora nadie puede
colaborar o guardar cambios versionados de aquello en que
están trabajando.
Profesor: Manel
Sistemas de Control de Versiones Centralizados
Control de Versiones
Programación de Sistemas IFCT0609
Si el disco duro en el que se encuentra la base de datos central
se corrompe, y no se han llevado copias de seguridad
adecuadamente, pierdes absolutamente todo
—toda la historia del proyecto salvo aquellas instantáneas que
la gente pueda tener en sus máquinas locales.
Los VCSs locales sufren de este mismo problema— cuando
tienes toda la historia del proyecto en un único lugar, te
arriesgas a perderlo todo.
Profesor: Manel
Sistemas de Control de Versiones Centralizados
Control de Versiones
Programación de Sistemas IFCT0609
Es aquí donde entran los sistemas de control de versiones
distribuidos (Distributed Version Control Systems o DVCSs en
inglés).
En un DVCS (como Git, Mercurial, Bazaar o Darcs), los clientes
no sólo descargan la última instantánea de los archivos:
replican completamente el repositorio.
Profesor: Manel
Sistemas de Control de Versiones Distribuidos
Control de Versiones
Programación de Sistemas IFCT0609
Así, si un servidor muere, y estos sistemas estaban
colaborando a través de él, cualquiera de los repositorios de
los clientes puede copiarse en el servidor para restaurarlo.
Cada vez que se descarga una instantánea, en realidad se hace
una copia de seguridad completa de todos los datos
Profesor: Manel
Sistemas de Control de Versiones Distribuidos
Control de Versiones
Programación de Sistemas IFCT0609
Profesor: Manel
Montero
Sistemas de Control de Versiones Distribuidos
Control de Versiones
Programación de Sistemas IFCT0609
Profesor: Manel
Montero
Sistemas de Control de Versiones Distribuidos
GIT fue lanzado en 2005 por Linus Torvalds, el creador de
Linux, para mantener el código del propio Linux entre los
miles de Programadores que trabajan en su mantenimiento
actualmente.
Control de Versiones
Programación de Sistemas IFCT0609
Profesor: Manel Montero
Sistemas de Control de Versiones Distribuidos
Algunos de los objetivos del nuevo sistema fueron los
siguientes:
Velocidad
Diseño sencillo
Fuerte apoyo al desarrollo no lineal (miles de ramas
paralelas)
Completamente distribuido
Capaz de manejar grandes proyectos (como el núcleo de
Linux) de manera eficiente (velocidad y tamaño de los
datos)
Control de Versiones
Programación de Sistemas IFCT0609
Profesor: Manel Montero
Sistemas de Control de Versiones Distribuidos
Desde su nacimiento en 2005, Git ha evolucionado y
madurado para ser fácil de usar y aún conservar estas
cualidades iniciales.
Es tremendamente rápido, muy eficiente con grandes
proyectos, y tiene un increíble sistema de ramificación
(branching) para desarrollo no lineal
Control de Versiones
Programación de Sistemas IFCT0609
Profesor: Manel Montero
Sistemas de Control de Versiones Distribuidos
La principal diferencia entre Git y cualquier otro VCS
(Subversion y compañía incluidos) es cómo Git modela sus
datos.
Conceptualmente, la mayoría de los demás sistemas
almacenan la información como una lista de cambios en los
archivos. Estos sistemas (CVS, Subversion, Perforce, Bazaar,
etc.) modelan la información que almacenan como un
conjunto de archivos y las modificaciones hechas sobre
cada uno de ellos a lo largo del tiempo.
Control de Versiones
Programación de Sistemas IFCT0609
Profesor: Manel Montero
Sistemas de Control de Versiones Distribuidos
Control de Versiones
Programación de Sistemas IFCT0609
Profesor: Manel Montero
Sistemas de Control de Versiones Distribuidos
Git no modela ni almacena sus datos de este modo. En
cambio, Git modela sus datos más como un conjunto de
instantáneas de un mini sistema de archivos. Cada vez que
confirmas un cambio, o guardas el estado de tu proyecto en
Git, él básicamente hace una foto del aspecto de todos tus
archivos en ese momento, y guarda una referencia a esa
instantánea. Para ser eficiente, si los archivos no se han
modificado, Git no almacena el archivo de nuevo, sólo un
enlace al archivo anterior idéntico que ya tiene almacenado
Control de Versiones
Programación de Sistemas IFCT0609
Profesor: Manel Montero
Sistemas de Control de Versiones Distribuidos
Control de Versiones
Programación de Sistemas IFCT0609
Profesor: Manel Montero
Sistemas de Control de Versiones Distribuidos
La mayoría de las operaciones en Git sólo necesitan archivos
y recursos locales para operar. No se suele necesitar
información de ningún otro ordenador de tu red. Si estás
acostumbrado a un CVCS donde la mayoría de operaciones
tienen el retardo de red, este aspecto de Git te va a hacer
pensar que Git es maravilloso.
Como tienes toda la historia del proyecto ahí mismo, en tu
disco local, la mayoría de las operaciones parecen
prácticamente inmediatas.
Control de Versiones
Programación de Sistemas IFCT0609
Profesor: Manel Montero
GIT
Por ejemplo, para navegar por la historia del proyecto,
Git no necesita salir al servidor para obtener la historia y
mostrártela,
simplemente la lee directamente de tu base de datos local.
Control de Versiones
Programación de Sistemas IFCT0609
Profesor: Manel Montero
GIT
Si quieres ver los cambios introducidos en un archivo entre
la versión actual y la de hace un mes,
Git puede buscar el archivo hace un mes y hacer un cálculo
de diferencias localmente,
en lugar de tener que pedirle a un servidor remoto que lo
haga,
u obtener una versión antigua desde la red y hacerlo de
manera local.
Control de Versiones
Programación de Sistemas IFCT0609
Profesor: Manel Montero
GIT
Esto también significa que hay muy poco que no puedas
hacer si estás desconectado o sin VPN. Si te subes a un
avión o a un tren y quieres trabajar un poco, puedes
confirmar tus cambios felizmente hasta que consigas una
conexión de red para subirlos. Si te vas a casa y no
consigues que tu cliente VPN funcione correctamente,
puedes seguir trabajando. En muchos otros sistemas, esto
es imposible o muy doloroso. En Perforce, por ejemplo, no
puedes hacer mucho cuando no estás conectado al servidor;
y en Subversion y CVS, puedes editar archivos, pero no
puedes confirmar los cambios a tu base de datos (porque tu
base de datos no tiene conexión). Esto puede no parecer
gran cosa, pero te sorprendería la diferencia que puede
suponer.
Control de Versiones
Programación de Sistemas IFCT0609
Profesor: Manel Montero
GIT
Todo en Git es verificado mediante una suma de
comprobación (checksum en inglés) antes de ser
almacenado, El mecanismo que usa Git para generar esta
comprobación se conoce como hash SHA-1.
Se trata de una cadena de 40 caracteres hexadecimales (0-9
y a-f), y se calcula en base a los contenidos del archivo o
estructura de directorios. Un hash SHA-1 tiene esta pinta:
24b9da6552252987aa493b52f8696cd6d3b00373
Control de Versiones
Programación de Sistemas IFCT0609
Profesor: Manel Montero
GIT
Git guarda todo no por nombre de archivo, sino por el
valor hash de sus contenidos
Control de Versiones
Programación de Sistemas IFCT0609
Profesor: Manel Montero
PERDER DATOS !!!
Puedes perder o estropear cambios que no has confirmado
todavía;
pero después de confirmar una instantánea en Git, es muy
difícil de perder,
especialmente si envías (push) tu base de datos a otro
repositorio con regularidad
Control de Versiones
Programación de Sistemas IFCT0609
Profesor: Manel Montero
Los tres estados de git
Git tiene tres estados principales en los que se pueden
encontrar tus archivos:
confirmado (committed),
modificado (modified), y
preparado (staged).
Control de Versiones
Programación de Sistemas IFCT0609
Profesor: Manel Montero
PERDER DATOS !!!
Confirmado significa que los datos están almacenados de
manera segura en tu base de datos local.
Modificado significa que has modificado el archivo pero
todavía no lo has confirmado a tu base de datos.
Preparado significa que has marcado un archivo modificado
en su versión actual para que vaya en tu próxima
confirmación.
Control de Versiones
Programación de Sistemas IFCT0609
Profesor: Manel Montero
3 ESTADOS!!!
Control de Versiones
Programación de Sistemas IFCT0609
Profesor: Manel Montero
PERDER DATOS !!!
El directorio de Git es donde Git almacena los metadatos y
la base de datos de objetos para tu proyecto.
Es la parte más importante de Git, y es lo que se copia
cuando clonas un repositorio desde otro ordenador.
Control de Versiones
Programación de Sistemas IFCT0609
Profesor: Manel Montero
PERDER DATOS !!!
El directorio de trabajo es una copia de una versión del
proyecto.
Estos archivos se sacan de la base de datos comprimida en
el directorio de Git, y se colocan en disco para que los
puedas usar o modificar.
Control de Versiones
Programación de Sistemas IFCT0609
Profesor: Manel Montero
PERDER DATOS !!!
El área de preparación es un sencillo archivo, generalmente
contenido en tu directorio de Git,
que almacena información acerca de lo que va a ir en tu
próxima confirmación.
A veces se le denomina índice, pero se está convirtiendo en
estándar el referirse a ella como el área de preparación.
Control de Versiones
Programación de Sistemas IFCT0609
Profesor: Manel Montero
COMO SE TRABAJA EN GIT
El flujo de trabajo básico en Git es algo así:
Modificas una serie de archivos en tu directorio de trabajo.
Preparas los archivos, añadiendolos a tu área de
preparación.
Confirmas los cambios, lo que toma los archivos tal y como
están en el área de preparación, y almacena esas
instantáneas de manera permanente en tu directorio de Git.
Control de Versiones
Programación de Sistemas IFCT0609
Profesor: Manel Montero
ESTADOS DE UN FICHERO O VERSION DE UN ARCHIVO
Si una versión concreta de un archivo está en el directorio
de Git, se considera confirmada (committed).
Si ha sufrido cambios desde que se obtuvo del repositorio,
pero ha sido añadida al área de preparación, está preparada
(staged).
Y si ha sufrido cambios desde que se obtuvo del
repositorio, pero no se ha preparado, está modificada
(modified).
Control de Versiones
Programación de Sistemas IFCT0609
Profesor: Manel Montero
INSTALACION DE GIT
En Linux, instalamos GIT
En Ubuntu / Debian
$> sudo apt install git
En Windows:
Descargando e instalando desde su página
http://msysgit.github.com/
Control de Versiones
Programación de Sistemas IFCT0609
Profesor: Manel Montero
INSTALACION DE GIT
Una vez instalado, tendrás tanto la versión de línea de comandos (incluido
un cliente SSH que nos será útil más adelante) como la interfaz gráfica de
usuario estándar.
Nota para el uso en Windows: Se debería usar Git con la shell provista por
msysGit (estilo Unix), lo cual permite usar las complejas líneas de comandos
de este libro.
Si por cualquier razón se necesitara usar la shell nativa de Windows, la
consola de línea de comandos, se han de usar las comillas dobles en vez de
las simples (para parámetros que contengan espacios) y se deben
entrecomillar los parámetros terminándolos con el acento circunflejo (^) si
están al final de la línea, ya que en Windows es uno de los símbolos de
continuación.
Control de Versiones
Programación de Sistemas IFCT0609
Profesor: Manel Montero
USUARIO
Tu identidad
Lo primero que deberías hacer cuando instalas Git es
establecer tu nombre de usuario y dirección de correo
electrónico.
Esto es importante porque las confirmaciones de cambios
(commits) en Git usan esta información, y es introducida de
manera inmutable en los commits que envías:
$ git config --global user.name “Pepe Martin"
$ git config --global user.email pepe@gmail.com
Control de Versiones
Programación de Sistemas IFCT0609
Profesor: Manel Montero
USUARIO
Ahora que tu identidad está configurada, puedes elegir el
editor de texto por defecto que se utilizará cuando Git
necesite que introduzcas un mensaje. Si no indicas nada, Git
usa el editor por defecto de tu sistema, que generalmente
es Vi o Vim. Si quieres usar otro editor de texto, como
nano, puedes hacer lo siguiente:
$ git config --global core.editor nano
Control de Versiones
Programación de Sistemas IFCT0609
Profesor: Manel Montero
USUARIO
Tu herramienta de diferencias
Otra opción útil que puede que quieras configurar es la herramienta de diferencias
por defecto, usada para resolver conflictos de unión (merge). Digamos que quieres
usar vimdiff:
$ git config --global merge.tool vimdiff
Control de Versiones
Programación de Sistemas IFCT0609
Profesor: Manel Montero
USUARIO
Si quieres comprobar la configuración
$ git config --list
Control de Versiones
Programación de Sistemas IFCT0609
Profesor: Manel Montero
USUARIO
Ayuda
$ git help config
Control de Versiones
Programación de Sistemas IFCT0609
Profesor: Manel Montero
FUNDAMENTOS DE GIT
Inicializando un repositorio en un directorio existente
Si estás empezando el seguimiento en Git de un proyecto
existente, necesitas ir al directorio del proyecto y escribir:
$ git init
Control de Versiones
Programación de Sistemas IFCT0609
Profesor: Manel Montero
FUNDAMENTOS DE GIT
Esto crea un nuevo subdirectorio llamado .git que contiene
todos los archivos necesarios del repositorio —un esqueleto
de un repositorio Git.
Todavía no hay nada en tu proyecto que esté bajo
seguimiento.
Control de Versiones
Programación de Sistemas IFCT0609
Profesor: Manel Montero
FUNDAMENTOS DE GIT
Hemos creado un directorio proyectos/proyecto1 en /home/usuario con anterioridad
$mkdir /home/usuario/proyectos/proyecto1
Control de Versiones
Programación de Sistemas IFCT0609
Profesor: Manel Montero
FUNDAMENTOS DE GIT
Si deseas empezar a controlar versiones de archivos
existentes (a diferencia de un directorio vacío),
probablemente deberías comenzar el seguimiento de esos
archivos y hacer una confirmación inicial. Puedes
conseguirlo con unos pocos comandos git add para
especificar qué archivos quieres controlar, seguidos de
un commit para confirmar los cambios:
$ git add *.py
$ git add README
$ git commit –m 'versión inicial del proyecto'
Control de Versiones
Programación de Sistemas IFCT0609
Profesor: Manel Montero
FUNDAMENTOS DE GIT
Control de Versiones
Programación de Sistemas IFCT0609
Profesor: Manel Montero
FUNDAMENTOS DE GIT
Ahora traemos 3 archivos Python desde el puente
dado1.py
dado2.py
dado3.py
Control de Versiones
Programación de Sistemas IFCT0609
Profesor: Manel Montero
FUNDAMENTOS DE GIT
Ahora traemos 3 archivos Python desde el puente
dado1.py
dado2.py
dado3.py
Control de Versiones
Programación de Sistemas IFCT0609
Profesor: Manel Montero
FUNDAMENTOS DE GIT
Para colaborar con un proyecto git, lo que hay que hacer es
un clone.
$>git clone git://github.com/schacon/grit.git
Si queremos darle otro nombre al proyecto.
$ git clone git://github.com/schacon/grit.git miproyectogrit
Control de Versiones
Programación de Sistemas IFCT0609
Profesor: Manel Montero
FUNDAMENTOS DE GIT
Para colaborar con un proyecto git, lo que hay que hacer es
un clone.
Por ejemplo también
El ejemplo anterior usa el protocolo
git://
http(s)://
usuario@servidor:/ruta.git
http(s):// o usuario@servidor:/ruta.git,
Control de Versiones
Programación de Sistemas IFCT0609
Profesor: Manel Montero
IMPORTAR UN PROYECTO- CLONE
En este caso
Git clone
usuario@192.168.1.140:/home/usuario/proyectos/proyecto
profe/.git
http(s):// o usuario@servidor:/ruta.git,
Control de Versiones
Programación de Sistemas IFCT0609
Profesor: Manel Montero
GUARDAR ESTADO NUEVO DE TU PROYECTO
Tienes un repositorio Git completo, y una copia de trabajo
de los archivos de ese proyecto.
Necesitas hacer algunos cambios, y confirmar instantáneas
de esos cambios a tu repositorio cada vez que el proyecto
alcance un estado que desees grabar.
http(s):// o usuario@servidor:/ruta.git,
Control de Versiones
Programación de Sistemas IFCT0609
Profesor: Manel Montero
GUARDAR ESTADO NUEVO DE TU PROYECTO
Recuerda que cada archivo de tu directorio de trabajo
puede estar dos estados:
bajo seguimiento (tracked),
o sin seguimiento (untracked).
Los archivos bajo seguimiento existían en la última
instantánea; pueden estar sin modificaciones, modificados,
o preparados.
Los archivos sin seguimiento son todos los demás —
cualquiera que no estuviese en tu última instantánea ni está
en tu área de preparación—.
La primera vez que clonas, todos tus archivos estarán bajo
seguimiento y sin modificaciones, ya que los acabas de
copiar y no has modificado nada.
Control de Versiones
Programación de Sistemas IFCT0609
Profesor: Manel Montero
GUARDAR ESTADO NUEVO DE TU PROYECTO
A medida que editas archivos, Git los ve como modificados,
porque los has cambiado desde tu última confirmación.
Preparas estos archivos modificados y luego confirmas
todos los cambios que hayas preparado, y el ciclo se repite
Control de Versiones
Programación de Sistemas IFCT0609
Profesor: Manel Montero
GUARDAR ESTADO NUEVO DE TU PROYECTO
Control de Versiones
Programación de Sistemas IFCT0609
Profesor: Manel Montero
Ver el estado
$>git status
# On branch master nothing to commit, working directory clean
Esto significa que todo ok, sin cambios
Control de Versiones
Programación de Sistemas IFCT0609
Profesor: Manel Montero
Ignorar archivos
A menudo tendrás un tipo de archivos que no quieras que
Git añada automáticamente o te muestre como no
versionado. Suelen ser archivos generados
automáticamente, como archivos de log, o archivos
generados por tu compilador. Para estos casos puedes crear
un archivo llamado .gitignore, en el que listas los patrones
de nombres que deseas que sean ignorados.
He aquí un archivo .gitignore de ejemplo:
$ cat .gitignore
*.[oa]
*~
Ignorando archivos
A menudo tendrás un tipo de archivos que no quieras que Git añada automáticamente o te muestre como no versionado. Suelen ser archivos generados automáticam
$ cat .gitignore *.[oa] *~
Control de Versiones
Programación de Sistemas IFCT0609
Profesor: Manel Montero
Ignorar archivos
# a comment – this is ignored
# no .a files
*.a
# but do track lib.a, even though you're ignoring .a files
above
!lib.a
# only ignore the root TODO file, not subdir/TODO
/TODO
# ignore all files in the build/ directory
build/
# ignore doc/notes.txt, but not doc/server/arch.txt
doc/*.txt
# ignore all .txt files in the doc/ directory
doc/**/*.txt
Control de Versiones
Programación de Sistemas IFCT0609
Profesor: Manel Montero
DIFERENCIAS DE ARCHIVOS
Para saber las diferencias de Archivos que has cambiado,
dispones del comando
$>git diff --staged
Compara la versión estable, con la ultima preparada
Ignorando archivos
A menudo tendrás un tipo de archivos que no quieras que Git añada automáticamente o te muestre como no versionado. Suelen ser archivos generados automáticam
$ cat .gitignore *.[oa] *~
Control de Versiones
Programación de Sistemas IFCT0609
Profesor: Manel Montero
DIFERENCIAS DE ARCHIVOS
Tienes que haber puesto git add para que se incluyan para
la siguiente confirmación.
Ignorando archivos
A menudo tendrás un tipo de archivos que no quieras que Git añada automáticamente o te muestre como no versionado. Suelen ser archivos generados automáticam
$ cat .gitignore *.[oa] *~
Control de Versiones
Programación de Sistemas IFCT0609
Profesor: Manel Montero
CONFIRMACION DE ARCHIVOS
Para confirmar LOS CAMBIOS EN EL SERVIDOR,
REALIZAREMOS
$>git commit
Cuando haces el git commit te pregunta que
“Cadena de texto a escribir para validar”
Escribes una cadena y guardas
Posteriormente se guardan los cambios validados en local.
Si quieres publicarlos se hará con “git push”
Ignorando archivos
A menudo tendrás un tipo de archivos que no quieras que Git añada automáticamente o te muestre como no versionado. Suelen ser archivos generados automáticam
$ cat .gitignore *.[oa] *~
Control de Versiones
Programación de Sistemas IFCT0609
Profesor: Manel Montero
CONFIRMACION DE ARCHIVOS
Si quieres confirmar directamente sin hacer el git add
$>git commit –a –m ‘Nuevos cambios’
Cuando haces el git commit te pregunta que
“Cadena de texto a escribir para validar”
Escribes una cadena y guardas
Posteriormente se guardan los cambios validados en local.
Si quieres publicarlos se hará con “git push”
Ignorando archivos
A menudo tendrás un tipo de archivos que no quieras que Git añada automáticamente o te muestre como no versionado. Suelen ser archivos generados automáticam
$ cat .gitignore *.[oa] *~
Control de Versiones
Programación de Sistemas IFCT0609
Profesor: Manel Montero
ELIMINACION DE ARCHIVOS
Si quieres ELIMINAR un archivo de GIT
$>git rm fichero
$>git rm log/*.log
Para eliminar un archivo de Git, debes eliminarlo de tus
archivos bajo seguimiento (más concretamente, debes
eliminarlo de tu área de preparación), y después confirmar.
El comando git rm se encarga de eso, y también elimina el
archivo de tu directorio de trabajo, para que no lo veas
entre los archivos sin seguimiento.
Con el parámetro –f se fuerza la eliminación
Control de Versiones
Programación de Sistemas IFCT0609
Profesor: Manel Montero
ELIMINACION DE ARCHIVOS
Si quieres eliminar el archivo del seguimiento de Git, pero
que siga en el área de trabajo
$>git rm --cached readme.txt
Control de Versiones
Programación de Sistemas IFCT0609
Profesor: Manel Montero
RENOMBRAR ARCHIVOS
$ git mv FICHERO_VIEJO_NOMBRE FICHERO_NUEVO_NOMBRE
Control de Versiones
Programación de Sistemas IFCT0609
Profesor: Manel Montero
Proyecto Para pruebas
git clone git://github.com/schacon/simplegit-progit.git
Probar después el “$>git log” para ver la secuencia de
commits sobre el proyecto. Aparecen en orden inverso
$>git log –p -2
-p muestra los mensajes
-2 muestra los dos últimos commits
Control de Versiones
Programación de Sistemas IFCT0609
Profesor: Manel Montero
Para visualizar el log más fácil
Gitk
Control de Versiones
Programación de Sistemas IFCT0609
Profesor: Manel Montero
Para visualizar el log más fácil
Si haces un commit y por ejemplo te has dejado un fichero
$ git commit -m ‘Commit inicial del martes 15’
$ git add fichero_olvidado
$ git commit –amend
Estos tres comandos acabarán convirtiéndose en una única confirmación —la
segunda confirmación reemplazará los resultados de la primera
Control de Versiones
Programación de Sistemas IFCT0609
Profesor: Manel Montero
Para sacar del área de preparacion
Preparas 2 archivos y quieres quitar uno
$>git add fichero1
$>git add fichero2
$> git status  Están los 2 ficheros
$>git reset HEAD fichero2
$git status  Solo estará el fichero1 ahora
Control de Versiones
Programación de Sistemas IFCT0609
Profesor: Manel Montero
Para volver a la antigua versión de un archivo
$>git checkout -- fichero.txt
Volverá a la versión validada ultima de fichero.txt
Control de Versiones
Programación de Sistemas IFCT0609
Profesor: Manel Montero
TRABAJAR CON REPOSITORIOS REMOTOS
Control de Versiones
Programación de Sistemas IFCT0609
Profesor: Manel Montero
Con repositorios remotos
Puedes tener varios,
Cada uno de los cuales puede ser de sólo lectura, o de
lectura/escritura, según los permisos que tengas.
Colaborar con otros implica gestionar estos repositorios
remotos, y
mandar (push) y
recibir (pull)
datos de ellos
Control de Versiones
Programación de Sistemas IFCT0609
Profesor: Manel Montero
Con repositorios remotos
Para saber los remotos, hacemos git remote
Si no sale nada, estamos en el servidor
Si sale origin (Es el servidor del que clonamos. Por defecto)
Si sale otra cosa, es el servidor del que clonamos
$ git remote -v
Control de Versiones
Programación de Sistemas IFCT0609
Profesor: Manel Montero
Con repositorios remotos
Si hay más de un remoto, se listan todos: (Pero solo se puede enviar al
remoto origen)
Control de Versiones
Programación de Sistemas IFCT0609
Profesor: Manel Montero
Añadir Repositorios Remotos
Para añadir un nuevo repositorio Git remoto,
asignándole un nombre con el que referenciarlo
fácilmente, ejecuta git remote add [nombre] [url]:
Control de Versiones
Programación de Sistemas IFCT0609
Profesor: Manel Montero
Enviar Info al servidor
$>git push origin master
Manda la información del Proyecto principal (master)
al Repositorio origin
Control de Versiones
Programación de Sistemas IFCT0609
Profesor: Manel Montero
Enviar Info al servidor
$>git push origin master
Este comando funciona únicamente si has clonado de un servidor en el
que tienes permiso de escritura, y nadie ha enviado información mientras
tanto. Si tú y otra persona clonais a la vez, y él envía su información y
luego envías tú la tuya, tu envío será rechazado. Tendrás que bajarte
primero su trabajo e incorporarlo en el tuyo para que se te permita hacer un
envío. para ver en detalle cómo enviar a servidores remotos.
FIN
Gracias por la atención !!!
Profesor: Manel
Montero
Gracias por la atención.

Más contenido relacionado

PDF
DevOps: una breve introducción
PDF
Control de versiones
DOCX
informe tecnico herramienta de vesionamiento.docx
DOCX
informe tecnico herramienta de vesionamiento.docx....
PPTX
Control de versiones
PDF
[ES] Sistemas de control de versiones
PDF
Control de versiones con git
PPTX
Presentacion #2 github Aplicaciones Seguras
DevOps: una breve introducción
Control de versiones
informe tecnico herramienta de vesionamiento.docx
informe tecnico herramienta de vesionamiento.docx....
Control de versiones
[ES] Sistemas de control de versiones
Control de versiones con git
Presentacion #2 github Aplicaciones Seguras

Similar a Uf2216 04-git (20)

PDF
Tema 1 Control de Versiones
PPTX
Git res baz ec - final
PDF
Manual para usuarios de Git @patxiredes.pdf
PDF
Manual de Taller Git y GitHub para el versionado de código.pdf
PDF
The Gift of Git [Español: La Palabra de Git]
PDF
Primeros pasos con git
PPTX
Induccion0_GitLab.pptx
PPTX
Git y Github basico.pptx
PPTX
Control de versiones con Git
ODP
Git: control de versiones
PDF
Control de versiones con Git
PDF
Conociendo GIT, herramienta para control de versiones
ODP
Aprendiendo GIT
PPTX
S14-DAW-2022S1.pptx
PDF
Control de versiones utilizando Git
PDF
Control de Versiones con Subversion (SVN)
ODP
Git windows
PPTX
PPT Git GitHub
PDF
Git 101+
PDF
Tallerintroducciongit
Tema 1 Control de Versiones
Git res baz ec - final
Manual para usuarios de Git @patxiredes.pdf
Manual de Taller Git y GitHub para el versionado de código.pdf
The Gift of Git [Español: La Palabra de Git]
Primeros pasos con git
Induccion0_GitLab.pptx
Git y Github basico.pptx
Control de versiones con Git
Git: control de versiones
Control de versiones con Git
Conociendo GIT, herramienta para control de versiones
Aprendiendo GIT
S14-DAW-2022S1.pptx
Control de versiones utilizando Git
Control de Versiones con Subversion (SVN)
Git windows
PPT Git GitHub
Git 101+
Tallerintroducciongit
Publicidad

Más de Manel Montero (7)

PDF
Subsistema logico tema 1. IFCT0210
PDF
Repositorios de Contenidos. CMS. Tema 1
PDF
Subsistema logico tema 2
PPSX
Seguridad Informática.
PPTX
Redes locales tema 06. Taller de Empleo Sistemas Microinformáticos. la Rincon...
PPS
Apuntes Redes locales tema 07. Taller Empleo Microinformática. La Rinconada. ...
PPS
Semillas Formativas
Subsistema logico tema 1. IFCT0210
Repositorios de Contenidos. CMS. Tema 1
Subsistema logico tema 2
Seguridad Informática.
Redes locales tema 06. Taller de Empleo Sistemas Microinformáticos. la Rincon...
Apuntes Redes locales tema 07. Taller Empleo Microinformática. La Rinconada. ...
Semillas Formativas
Publicidad

Último (20)

PPTX
Sistema Cardiovascular, funciones, partes
PPTX
Las buenas costumbres en la familiaaaaaaa
PDF
NORMA_1887_LEY_27269_Modificada_por_LEY_27310.pdf
PDF
Unidad Nº 1 Introduccion a Estadísticas
PPTX
Diabetes Mellitus, funciones, partes y tipos
PDF
dhjhfjhjcnjhghhhdfhuhhchchuuhuhduhduddyhdu
PDF
Rendición_Pública_de_Cuentas_Inicial_2019.pdf
PPTX
CANALES DE DISTRIBUCION en comercio internacional
PPSX
Unidad II - Diseño de una solucion 2025.ppsx
PPTX
lareformaprevisional-091013175510-phpapp01.pptx
PDF
EJERCICIOS RESUELTOS CON SOLVER EXCEL.pdf
PPTX
Inteligencia_Artificialdelosk_Mujer.pptx
DOCX
Estratégias de Ventas para WhatsApp paso a paso
PPTX
Milder Antoni quirhuayo segura trabajo de investigación .pptx
PPT
2010_06 FSI_ASBA Pruebas de Stress de Riesgo de Crédito El Caso Peruano MLUY_...
PPTX
Status Proyecto CIVIX INTELIGENCIA ARTIFICIAL
DOCX
LAS DROGAS, SU CONSUMO Y LAS ADICCIONES.docx
PDF
Principios d. Anatomía y no se que más poner jaja
PDF
PRESENTACION DE LA ASIGNATURA materiales no convencionales.pdf
PPTX
Curriculo-de-Matematica-Un-Enfoque-por-Competencias.pptx
Sistema Cardiovascular, funciones, partes
Las buenas costumbres en la familiaaaaaaa
NORMA_1887_LEY_27269_Modificada_por_LEY_27310.pdf
Unidad Nº 1 Introduccion a Estadísticas
Diabetes Mellitus, funciones, partes y tipos
dhjhfjhjcnjhghhhdfhuhhchchuuhuhduhduddyhdu
Rendición_Pública_de_Cuentas_Inicial_2019.pdf
CANALES DE DISTRIBUCION en comercio internacional
Unidad II - Diseño de una solucion 2025.ppsx
lareformaprevisional-091013175510-phpapp01.pptx
EJERCICIOS RESUELTOS CON SOLVER EXCEL.pdf
Inteligencia_Artificialdelosk_Mujer.pptx
Estratégias de Ventas para WhatsApp paso a paso
Milder Antoni quirhuayo segura trabajo de investigación .pptx
2010_06 FSI_ASBA Pruebas de Stress de Riesgo de Crédito El Caso Peruano MLUY_...
Status Proyecto CIVIX INTELIGENCIA ARTIFICIAL
LAS DROGAS, SU CONSUMO Y LAS ADICCIONES.docx
Principios d. Anatomía y no se que más poner jaja
PRESENTACION DE LA ASIGNATURA materiales no convencionales.pdf
Curriculo-de-Matematica-Un-Enfoque-por-Competencias.pptx

Uf2216 04-git

  • 1. Programación de Sistemas IFCT0609 Profesor: Manel Montero
  • 2. Programación de Sistemas IFCT0609 – Sistemas de Gestión IFCD0211 Profesor: Manel Montero
  • 3. INDICE Programación de Sistemas IFCT0609 • Sistemas de Control de Versiones Profesor: Manel
  • 4. Control de Versiones Programación de Sistemas IFCT0609 ¿Qué es el control de versiones? El control de versiones es un sistema que registra los cambios realizados sobre un archivo o conjunto de archivos a lo largo del tiempo, de modo que puedas recuperar versiones específicas más adelante. Profesor: Manel Introducción
  • 5. Control de Versiones Programación de Sistemas IFCT0609 Cualquier tipo de archivo que encuentres en un ordenador puede ponerse bajo control de versiones Profesor: Manel Introducción
  • 6. Control de Versiones Programación de Sistemas IFCT0609 Si eres diseñador gráfico o web, y quieres mantener cada versión de una imagen o diseño (algo que sin duda quieres), un sistema de control de versiones (Version Control System o VCS en inglés) es una elección muy sabia. Profesor: Manel Introducción
  • 7. Control de Versiones Programación de Sistemas IFCT0609 Te 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. Profesor: Manel Introducción
  • 8. Control de Versiones Programación de Sistemas IFCT0609 Usar un VCS también significa generalmente que si fastidias o pierdes archivos, puedes recuperarlos fácilmente. Además, obtienes todos estos beneficios a un coste muy bajo. Profesor: Manel Introducción
  • 9. Control de Versiones Programación de Sistemas IFCT0609 Un método de control de versiones usado por mucha gente es copiar los archivos a otro directorio (quizás indicando la fecha y hora en que lo hicieron, si son avispados). Este enfoque es muy común porque es muy simple, pero también tremendamente propenso a errores. Profesor: Manel LOS METODOS DE LA GENTE…
  • 10. Control de Versiones Programación de Sistemas IFCT0609 Es fácil olvidar en qué directorio te encuentras, y guardar accidentalmente en el archivo equivocado o sobrescribir archivos que no querías. Profesor: Manel LOS METODOS DE LA GENTE…
  • 11. Control de Versiones Programación de Sistemas IFCT0609 Para hacer frente a este problema, los programadores desarrollaron hace tiempo VCSs locales que contenían una simple base de datos en la que se llevaba registro de todos los cambios realizados sobre los archivos. Profesor: Manel LOS METODOS DE LA GENTE…
  • 12. Control de Versiones Programación de Sistemas IFCT0609 El siguiente gran problema que se encuentra la gente es que necesitan colaborar con desarrolladores en otros sistemas. Para solventar este problema, se desarrollaron los sistemas de control de versiones centralizados (Centralized Version Control Systems o CVCSs en inglés). Profesor: Manel Sistemas de Control de Versiones Centralizados
  • 13. Control de Versiones Programación de Sistemas IFCT0609 Estos sistemas, como CVS y Subversion tienen un único servidor que contiene todos los archivos versionados, y varios clientes que descargan los archivos desde ese lugar central. Durante muchos años éste ha sido el estándar para el control de versiones Profesor: Manel Sistemas de Control de Versiones Centralizados
  • 14. Control de Versiones Programación de Sistemas IFCT0609 Profesor: Manel Montero Sistemas de Control de Versiones Centralizados
  • 15. Control de Versiones Programación de Sistemas IFCT0609 Sin embargo, esta configuración también tiene serias desventajas. La más obvia es el punto único de fallo que representa el servidor centralizado. Si ese servidor se cae durante una hora, entonces durante esa hora nadie puede colaborar o guardar cambios versionados de aquello en que están trabajando. Profesor: Manel Sistemas de Control de Versiones Centralizados
  • 16. Control de Versiones Programación de Sistemas IFCT0609 Si el disco duro en el que se encuentra la base de datos central se corrompe, y no se han llevado copias de seguridad adecuadamente, pierdes absolutamente todo —toda la historia del proyecto salvo aquellas instantáneas que la gente pueda tener en sus máquinas locales. Los VCSs locales sufren de este mismo problema— cuando tienes toda la historia del proyecto en un único lugar, te arriesgas a perderlo todo. Profesor: Manel Sistemas de Control de Versiones Centralizados
  • 17. Control de Versiones Programación de Sistemas IFCT0609 Es aquí donde entran los sistemas de control de versiones distribuidos (Distributed Version Control Systems o DVCSs en inglés). En un DVCS (como Git, Mercurial, Bazaar o Darcs), los clientes no sólo descargan la última instantánea de los archivos: replican completamente el repositorio. Profesor: Manel Sistemas de Control de Versiones Distribuidos
  • 18. Control de Versiones Programación de Sistemas IFCT0609 Así, si un servidor muere, y estos sistemas estaban colaborando a través de él, cualquiera de los repositorios de los clientes puede copiarse en el servidor para restaurarlo. Cada vez que se descarga una instantánea, en realidad se hace una copia de seguridad completa de todos los datos Profesor: Manel Sistemas de Control de Versiones Distribuidos
  • 19. Control de Versiones Programación de Sistemas IFCT0609 Profesor: Manel Montero Sistemas de Control de Versiones Distribuidos
  • 20. Control de Versiones Programación de Sistemas IFCT0609 Profesor: Manel Montero Sistemas de Control de Versiones Distribuidos GIT fue lanzado en 2005 por Linus Torvalds, el creador de Linux, para mantener el código del propio Linux entre los miles de Programadores que trabajan en su mantenimiento actualmente.
  • 21. Control de Versiones Programación de Sistemas IFCT0609 Profesor: Manel Montero Sistemas de Control de Versiones Distribuidos Algunos de los objetivos del nuevo sistema fueron los siguientes: Velocidad Diseño sencillo Fuerte apoyo al desarrollo no lineal (miles de ramas paralelas) Completamente distribuido Capaz de manejar grandes proyectos (como el núcleo de Linux) de manera eficiente (velocidad y tamaño de los datos)
  • 22. Control de Versiones Programación de Sistemas IFCT0609 Profesor: Manel Montero Sistemas de Control de Versiones Distribuidos Desde su nacimiento en 2005, Git ha evolucionado y madurado para ser fácil de usar y aún conservar estas cualidades iniciales. Es tremendamente rápido, muy eficiente con grandes proyectos, y tiene un increíble sistema de ramificación (branching) para desarrollo no lineal
  • 23. Control de Versiones Programación de Sistemas IFCT0609 Profesor: Manel Montero Sistemas de Control de Versiones Distribuidos La principal diferencia entre Git y cualquier otro VCS (Subversion y compañía incluidos) es cómo Git modela sus datos. Conceptualmente, la mayoría de los demás sistemas almacenan la información como una lista de cambios en los archivos. Estos sistemas (CVS, Subversion, Perforce, Bazaar, etc.) modelan la información que almacenan como un conjunto de archivos y las modificaciones hechas sobre cada uno de ellos a lo largo del tiempo.
  • 24. Control de Versiones Programación de Sistemas IFCT0609 Profesor: Manel Montero Sistemas de Control de Versiones Distribuidos
  • 25. Control de Versiones Programación de Sistemas IFCT0609 Profesor: Manel Montero Sistemas de Control de Versiones Distribuidos Git no modela ni almacena sus datos de este modo. En cambio, Git modela sus datos más como un conjunto de instantáneas de un mini sistema de archivos. Cada vez que confirmas un cambio, o guardas el estado de tu proyecto en Git, él básicamente hace una foto del aspecto de todos tus archivos en ese momento, y guarda una referencia a esa instantánea. Para ser eficiente, si los archivos no se han modificado, Git no almacena el archivo de nuevo, sólo un enlace al archivo anterior idéntico que ya tiene almacenado
  • 26. Control de Versiones Programación de Sistemas IFCT0609 Profesor: Manel Montero Sistemas de Control de Versiones Distribuidos
  • 27. Control de Versiones Programación de Sistemas IFCT0609 Profesor: Manel Montero Sistemas de Control de Versiones Distribuidos La mayoría de las operaciones en Git sólo necesitan archivos y recursos locales para operar. No se suele necesitar información de ningún otro ordenador de tu red. Si estás acostumbrado a un CVCS donde la mayoría de operaciones tienen el retardo de red, este aspecto de Git te va a hacer pensar que Git es maravilloso. Como tienes toda la historia del proyecto ahí mismo, en tu disco local, la mayoría de las operaciones parecen prácticamente inmediatas.
  • 28. Control de Versiones Programación de Sistemas IFCT0609 Profesor: Manel Montero GIT Por ejemplo, para navegar por la historia del proyecto, Git no necesita salir al servidor para obtener la historia y mostrártela, simplemente la lee directamente de tu base de datos local.
  • 29. Control de Versiones Programación de Sistemas IFCT0609 Profesor: Manel Montero GIT Si quieres ver los cambios introducidos en un archivo entre la versión actual y la de hace un mes, Git puede buscar el archivo hace un mes y hacer un cálculo de diferencias localmente, en lugar de tener que pedirle a un servidor remoto que lo haga, u obtener una versión antigua desde la red y hacerlo de manera local.
  • 30. Control de Versiones Programación de Sistemas IFCT0609 Profesor: Manel Montero GIT Esto también significa que hay muy poco que no puedas hacer si estás desconectado o sin VPN. Si te subes a un avión o a un tren y quieres trabajar un poco, puedes confirmar tus cambios felizmente hasta que consigas una conexión de red para subirlos. Si te vas a casa y no consigues que tu cliente VPN funcione correctamente, puedes seguir trabajando. En muchos otros sistemas, esto es imposible o muy doloroso. En Perforce, por ejemplo, no puedes hacer mucho cuando no estás conectado al servidor; y en Subversion y CVS, puedes editar archivos, pero no puedes confirmar los cambios a tu base de datos (porque tu base de datos no tiene conexión). Esto puede no parecer gran cosa, pero te sorprendería la diferencia que puede suponer.
  • 31. Control de Versiones Programación de Sistemas IFCT0609 Profesor: Manel Montero GIT Todo en Git es verificado mediante una suma de comprobación (checksum en inglés) antes de ser almacenado, El mecanismo que usa Git para generar esta comprobación se conoce como hash SHA-1. Se trata de una cadena de 40 caracteres hexadecimales (0-9 y a-f), y se calcula en base a los contenidos del archivo o estructura de directorios. Un hash SHA-1 tiene esta pinta: 24b9da6552252987aa493b52f8696cd6d3b00373
  • 32. Control de Versiones Programación de Sistemas IFCT0609 Profesor: Manel Montero GIT Git guarda todo no por nombre de archivo, sino por el valor hash de sus contenidos
  • 33. Control de Versiones Programación de Sistemas IFCT0609 Profesor: Manel Montero PERDER DATOS !!! Puedes perder o estropear cambios que no has confirmado todavía; pero después de confirmar una instantánea en Git, es muy difícil de perder, especialmente si envías (push) tu base de datos a otro repositorio con regularidad
  • 34. Control de Versiones Programación de Sistemas IFCT0609 Profesor: Manel Montero Los tres estados de git Git tiene tres estados principales en los que se pueden encontrar tus archivos: confirmado (committed), modificado (modified), y preparado (staged).
  • 35. Control de Versiones Programación de Sistemas IFCT0609 Profesor: Manel Montero PERDER DATOS !!! Confirmado significa que los datos están almacenados de manera segura en tu base de datos local. Modificado significa que has modificado el archivo pero todavía no lo has confirmado a tu base de datos. Preparado significa que has marcado un archivo modificado en su versión actual para que vaya en tu próxima confirmación.
  • 36. Control de Versiones Programación de Sistemas IFCT0609 Profesor: Manel Montero 3 ESTADOS!!!
  • 37. Control de Versiones Programación de Sistemas IFCT0609 Profesor: Manel Montero PERDER DATOS !!! El directorio de Git es donde Git almacena los metadatos y la base de datos de objetos para tu proyecto. Es la parte más importante de Git, y es lo que se copia cuando clonas un repositorio desde otro ordenador.
  • 38. Control de Versiones Programación de Sistemas IFCT0609 Profesor: Manel Montero PERDER DATOS !!! El directorio de trabajo es una copia de una versión del proyecto. Estos archivos se sacan de la base de datos comprimida en el directorio de Git, y se colocan en disco para que los puedas usar o modificar.
  • 39. Control de Versiones Programación de Sistemas IFCT0609 Profesor: Manel Montero PERDER DATOS !!! El área de preparación es un sencillo archivo, generalmente contenido en tu directorio de Git, que almacena información acerca de lo que va a ir en tu próxima confirmación. A veces se le denomina índice, pero se está convirtiendo en estándar el referirse a ella como el área de preparación.
  • 40. Control de Versiones Programación de Sistemas IFCT0609 Profesor: Manel Montero COMO SE TRABAJA EN GIT El flujo de trabajo básico en Git es algo así: Modificas una serie de archivos en tu directorio de trabajo. Preparas los archivos, añadiendolos a tu área de preparación. Confirmas los cambios, lo que toma los archivos tal y como están en el área de preparación, y almacena esas instantáneas de manera permanente en tu directorio de Git.
  • 41. Control de Versiones Programación de Sistemas IFCT0609 Profesor: Manel Montero ESTADOS DE UN FICHERO O VERSION DE UN ARCHIVO Si una versión concreta de un archivo está en el directorio de Git, se considera confirmada (committed). Si ha sufrido cambios desde que se obtuvo del repositorio, pero ha sido añadida al área de preparación, está preparada (staged). Y si ha sufrido cambios desde que se obtuvo del repositorio, pero no se ha preparado, está modificada (modified).
  • 42. Control de Versiones Programación de Sistemas IFCT0609 Profesor: Manel Montero INSTALACION DE GIT En Linux, instalamos GIT En Ubuntu / Debian $> sudo apt install git En Windows: Descargando e instalando desde su página http://msysgit.github.com/
  • 43. Control de Versiones Programación de Sistemas IFCT0609 Profesor: Manel Montero INSTALACION DE GIT Una vez instalado, tendrás tanto la versión de línea de comandos (incluido un cliente SSH que nos será útil más adelante) como la interfaz gráfica de usuario estándar. Nota para el uso en Windows: Se debería usar Git con la shell provista por msysGit (estilo Unix), lo cual permite usar las complejas líneas de comandos de este libro. Si por cualquier razón se necesitara usar la shell nativa de Windows, la consola de línea de comandos, se han de usar las comillas dobles en vez de las simples (para parámetros que contengan espacios) y se deben entrecomillar los parámetros terminándolos con el acento circunflejo (^) si están al final de la línea, ya que en Windows es uno de los símbolos de continuación.
  • 44. Control de Versiones Programación de Sistemas IFCT0609 Profesor: Manel Montero USUARIO Tu identidad Lo primero que deberías hacer cuando instalas Git es establecer tu nombre de usuario y dirección de correo electrónico. Esto es importante porque las confirmaciones de cambios (commits) en Git usan esta información, y es introducida de manera inmutable en los commits que envías: $ git config --global user.name “Pepe Martin" $ git config --global user.email pepe@gmail.com
  • 45. Control de Versiones Programación de Sistemas IFCT0609 Profesor: Manel Montero USUARIO Ahora que tu identidad está configurada, puedes elegir el editor de texto por defecto que se utilizará cuando Git necesite que introduzcas un mensaje. Si no indicas nada, Git usa el editor por defecto de tu sistema, que generalmente es Vi o Vim. Si quieres usar otro editor de texto, como nano, puedes hacer lo siguiente: $ git config --global core.editor nano
  • 46. Control de Versiones Programación de Sistemas IFCT0609 Profesor: Manel Montero USUARIO Tu herramienta de diferencias Otra opción útil que puede que quieras configurar es la herramienta de diferencias por defecto, usada para resolver conflictos de unión (merge). Digamos que quieres usar vimdiff: $ git config --global merge.tool vimdiff
  • 47. Control de Versiones Programación de Sistemas IFCT0609 Profesor: Manel Montero USUARIO Si quieres comprobar la configuración $ git config --list
  • 48. Control de Versiones Programación de Sistemas IFCT0609 Profesor: Manel Montero USUARIO Ayuda $ git help config
  • 49. Control de Versiones Programación de Sistemas IFCT0609 Profesor: Manel Montero FUNDAMENTOS DE GIT Inicializando un repositorio en un directorio existente Si estás empezando el seguimiento en Git de un proyecto existente, necesitas ir al directorio del proyecto y escribir: $ git init
  • 50. Control de Versiones Programación de Sistemas IFCT0609 Profesor: Manel Montero FUNDAMENTOS DE GIT Esto crea un nuevo subdirectorio llamado .git que contiene todos los archivos necesarios del repositorio —un esqueleto de un repositorio Git. Todavía no hay nada en tu proyecto que esté bajo seguimiento.
  • 51. Control de Versiones Programación de Sistemas IFCT0609 Profesor: Manel Montero FUNDAMENTOS DE GIT Hemos creado un directorio proyectos/proyecto1 en /home/usuario con anterioridad $mkdir /home/usuario/proyectos/proyecto1
  • 52. Control de Versiones Programación de Sistemas IFCT0609 Profesor: Manel Montero FUNDAMENTOS DE GIT Si deseas empezar a controlar versiones de archivos existentes (a diferencia de un directorio vacío), probablemente deberías comenzar el seguimiento de esos archivos y hacer una confirmación inicial. Puedes conseguirlo con unos pocos comandos git add para especificar qué archivos quieres controlar, seguidos de un commit para confirmar los cambios: $ git add *.py $ git add README $ git commit –m 'versión inicial del proyecto'
  • 53. Control de Versiones Programación de Sistemas IFCT0609 Profesor: Manel Montero FUNDAMENTOS DE GIT
  • 54. Control de Versiones Programación de Sistemas IFCT0609 Profesor: Manel Montero FUNDAMENTOS DE GIT Ahora traemos 3 archivos Python desde el puente dado1.py dado2.py dado3.py
  • 55. Control de Versiones Programación de Sistemas IFCT0609 Profesor: Manel Montero FUNDAMENTOS DE GIT Ahora traemos 3 archivos Python desde el puente dado1.py dado2.py dado3.py
  • 56. Control de Versiones Programación de Sistemas IFCT0609 Profesor: Manel Montero FUNDAMENTOS DE GIT Para colaborar con un proyecto git, lo que hay que hacer es un clone. $>git clone git://github.com/schacon/grit.git Si queremos darle otro nombre al proyecto. $ git clone git://github.com/schacon/grit.git miproyectogrit
  • 57. Control de Versiones Programación de Sistemas IFCT0609 Profesor: Manel Montero FUNDAMENTOS DE GIT Para colaborar con un proyecto git, lo que hay que hacer es un clone. Por ejemplo también El ejemplo anterior usa el protocolo git:// http(s):// usuario@servidor:/ruta.git http(s):// o usuario@servidor:/ruta.git,
  • 58. Control de Versiones Programación de Sistemas IFCT0609 Profesor: Manel Montero IMPORTAR UN PROYECTO- CLONE En este caso Git clone usuario@192.168.1.140:/home/usuario/proyectos/proyecto profe/.git http(s):// o usuario@servidor:/ruta.git,
  • 59. Control de Versiones Programación de Sistemas IFCT0609 Profesor: Manel Montero GUARDAR ESTADO NUEVO DE TU PROYECTO Tienes un repositorio Git completo, y una copia de trabajo de los archivos de ese proyecto. Necesitas hacer algunos cambios, y confirmar instantáneas de esos cambios a tu repositorio cada vez que el proyecto alcance un estado que desees grabar. http(s):// o usuario@servidor:/ruta.git,
  • 60. Control de Versiones Programación de Sistemas IFCT0609 Profesor: Manel Montero GUARDAR ESTADO NUEVO DE TU PROYECTO Recuerda que cada archivo de tu directorio de trabajo puede estar dos estados: bajo seguimiento (tracked), o sin seguimiento (untracked). Los archivos bajo seguimiento existían en la última instantánea; pueden estar sin modificaciones, modificados, o preparados. Los archivos sin seguimiento son todos los demás — cualquiera que no estuviese en tu última instantánea ni está en tu área de preparación—. La primera vez que clonas, todos tus archivos estarán bajo seguimiento y sin modificaciones, ya que los acabas de copiar y no has modificado nada.
  • 61. Control de Versiones Programación de Sistemas IFCT0609 Profesor: Manel Montero GUARDAR ESTADO NUEVO DE TU PROYECTO A medida que editas archivos, Git los ve como modificados, porque los has cambiado desde tu última confirmación. Preparas estos archivos modificados y luego confirmas todos los cambios que hayas preparado, y el ciclo se repite
  • 62. Control de Versiones Programación de Sistemas IFCT0609 Profesor: Manel Montero GUARDAR ESTADO NUEVO DE TU PROYECTO
  • 63. Control de Versiones Programación de Sistemas IFCT0609 Profesor: Manel Montero Ver el estado $>git status # On branch master nothing to commit, working directory clean Esto significa que todo ok, sin cambios
  • 64. Control de Versiones Programación de Sistemas IFCT0609 Profesor: Manel Montero Ignorar archivos A menudo tendrás un tipo de archivos que no quieras que Git añada automáticamente o te muestre como no versionado. Suelen ser archivos generados automáticamente, como archivos de log, o archivos generados por tu compilador. Para estos casos puedes crear un archivo llamado .gitignore, en el que listas los patrones de nombres que deseas que sean ignorados. He aquí un archivo .gitignore de ejemplo: $ cat .gitignore *.[oa] *~ Ignorando archivos A menudo tendrás un tipo de archivos que no quieras que Git añada automáticamente o te muestre como no versionado. Suelen ser archivos generados automáticam $ cat .gitignore *.[oa] *~
  • 65. Control de Versiones Programación de Sistemas IFCT0609 Profesor: Manel Montero Ignorar archivos # a comment – this is ignored # no .a files *.a # but do track lib.a, even though you're ignoring .a files above !lib.a # only ignore the root TODO file, not subdir/TODO /TODO # ignore all files in the build/ directory build/ # ignore doc/notes.txt, but not doc/server/arch.txt doc/*.txt # ignore all .txt files in the doc/ directory doc/**/*.txt
  • 66. Control de Versiones Programación de Sistemas IFCT0609 Profesor: Manel Montero DIFERENCIAS DE ARCHIVOS Para saber las diferencias de Archivos que has cambiado, dispones del comando $>git diff --staged Compara la versión estable, con la ultima preparada Ignorando archivos A menudo tendrás un tipo de archivos que no quieras que Git añada automáticamente o te muestre como no versionado. Suelen ser archivos generados automáticam $ cat .gitignore *.[oa] *~
  • 67. Control de Versiones Programación de Sistemas IFCT0609 Profesor: Manel Montero DIFERENCIAS DE ARCHIVOS Tienes que haber puesto git add para que se incluyan para la siguiente confirmación. Ignorando archivos A menudo tendrás un tipo de archivos que no quieras que Git añada automáticamente o te muestre como no versionado. Suelen ser archivos generados automáticam $ cat .gitignore *.[oa] *~
  • 68. Control de Versiones Programación de Sistemas IFCT0609 Profesor: Manel Montero CONFIRMACION DE ARCHIVOS Para confirmar LOS CAMBIOS EN EL SERVIDOR, REALIZAREMOS $>git commit Cuando haces el git commit te pregunta que “Cadena de texto a escribir para validar” Escribes una cadena y guardas Posteriormente se guardan los cambios validados en local. Si quieres publicarlos se hará con “git push” Ignorando archivos A menudo tendrás un tipo de archivos que no quieras que Git añada automáticamente o te muestre como no versionado. Suelen ser archivos generados automáticam $ cat .gitignore *.[oa] *~
  • 69. Control de Versiones Programación de Sistemas IFCT0609 Profesor: Manel Montero CONFIRMACION DE ARCHIVOS Si quieres confirmar directamente sin hacer el git add $>git commit –a –m ‘Nuevos cambios’ Cuando haces el git commit te pregunta que “Cadena de texto a escribir para validar” Escribes una cadena y guardas Posteriormente se guardan los cambios validados en local. Si quieres publicarlos se hará con “git push” Ignorando archivos A menudo tendrás un tipo de archivos que no quieras que Git añada automáticamente o te muestre como no versionado. Suelen ser archivos generados automáticam $ cat .gitignore *.[oa] *~
  • 70. Control de Versiones Programación de Sistemas IFCT0609 Profesor: Manel Montero ELIMINACION DE ARCHIVOS Si quieres ELIMINAR un archivo de GIT $>git rm fichero $>git rm log/*.log Para eliminar un archivo de Git, debes eliminarlo de tus archivos bajo seguimiento (más concretamente, debes eliminarlo de tu área de preparación), y después confirmar. El comando git rm se encarga de eso, y también elimina el archivo de tu directorio de trabajo, para que no lo veas entre los archivos sin seguimiento. Con el parámetro –f se fuerza la eliminación
  • 71. Control de Versiones Programación de Sistemas IFCT0609 Profesor: Manel Montero ELIMINACION DE ARCHIVOS Si quieres eliminar el archivo del seguimiento de Git, pero que siga en el área de trabajo $>git rm --cached readme.txt
  • 72. Control de Versiones Programación de Sistemas IFCT0609 Profesor: Manel Montero RENOMBRAR ARCHIVOS $ git mv FICHERO_VIEJO_NOMBRE FICHERO_NUEVO_NOMBRE
  • 73. Control de Versiones Programación de Sistemas IFCT0609 Profesor: Manel Montero Proyecto Para pruebas git clone git://github.com/schacon/simplegit-progit.git Probar después el “$>git log” para ver la secuencia de commits sobre el proyecto. Aparecen en orden inverso $>git log –p -2 -p muestra los mensajes -2 muestra los dos últimos commits
  • 74. Control de Versiones Programación de Sistemas IFCT0609 Profesor: Manel Montero Para visualizar el log más fácil Gitk
  • 75. Control de Versiones Programación de Sistemas IFCT0609 Profesor: Manel Montero Para visualizar el log más fácil Si haces un commit y por ejemplo te has dejado un fichero $ git commit -m ‘Commit inicial del martes 15’ $ git add fichero_olvidado $ git commit –amend Estos tres comandos acabarán convirtiéndose en una única confirmación —la segunda confirmación reemplazará los resultados de la primera
  • 76. Control de Versiones Programación de Sistemas IFCT0609 Profesor: Manel Montero Para sacar del área de preparacion Preparas 2 archivos y quieres quitar uno $>git add fichero1 $>git add fichero2 $> git status  Están los 2 ficheros $>git reset HEAD fichero2 $git status  Solo estará el fichero1 ahora
  • 77. Control de Versiones Programación de Sistemas IFCT0609 Profesor: Manel Montero Para volver a la antigua versión de un archivo $>git checkout -- fichero.txt Volverá a la versión validada ultima de fichero.txt
  • 78. Control de Versiones Programación de Sistemas IFCT0609 Profesor: Manel Montero TRABAJAR CON REPOSITORIOS REMOTOS
  • 79. Control de Versiones Programación de Sistemas IFCT0609 Profesor: Manel Montero Con repositorios remotos Puedes tener varios, Cada uno de los cuales puede ser de sólo lectura, o de lectura/escritura, según los permisos que tengas. Colaborar con otros implica gestionar estos repositorios remotos, y mandar (push) y recibir (pull) datos de ellos
  • 80. Control de Versiones Programación de Sistemas IFCT0609 Profesor: Manel Montero Con repositorios remotos Para saber los remotos, hacemos git remote Si no sale nada, estamos en el servidor Si sale origin (Es el servidor del que clonamos. Por defecto) Si sale otra cosa, es el servidor del que clonamos $ git remote -v
  • 81. Control de Versiones Programación de Sistemas IFCT0609 Profesor: Manel Montero Con repositorios remotos Si hay más de un remoto, se listan todos: (Pero solo se puede enviar al remoto origen)
  • 82. Control de Versiones Programación de Sistemas IFCT0609 Profesor: Manel Montero Añadir Repositorios Remotos Para añadir un nuevo repositorio Git remoto, asignándole un nombre con el que referenciarlo fácilmente, ejecuta git remote add [nombre] [url]:
  • 83. Control de Versiones Programación de Sistemas IFCT0609 Profesor: Manel Montero Enviar Info al servidor $>git push origin master Manda la información del Proyecto principal (master) al Repositorio origin
  • 84. Control de Versiones Programación de Sistemas IFCT0609 Profesor: Manel Montero Enviar Info al servidor $>git push origin master Este comando funciona únicamente si has clonado de un servidor en el que tienes permiso de escritura, y nadie ha enviado información mientras tanto. Si tú y otra persona clonais a la vez, y él envía su información y luego envías tú la tuya, tu envío será rechazado. Tendrás que bajarte primero su trabajo e incorporarlo en el tuyo para que se te permita hacer un envío. para ver en detalle cómo enviar a servidores remotos.
  • 85. FIN Gracias por la atención !!! Profesor: Manel Montero Gracias por la atención.