Control de Versiones Con Git y Bitbucket

40
Control de versiones con Git Bitbucket Gestión de Proyectos Curso 2014/15 Escola Tècnica Superior d’Enginyeria Informàtica Universitat Politècnica de València

description

Introducción al control de versiones mediante Git, y utilizando como repositorio remoto Bitbucket

Transcript of Control de Versiones Con Git y Bitbucket

Introduccin a Git

Control de versiones con Git y BitbucketGestin de ProyectosCurso 2014/15

Escola Tcnica Superior dEnginyeria InformticaUniversitat Politcnica de Valncia

Introduccin a Git y BitbucketCrear una cuenta en Bitbucket y un primer repositorio GitClonar un repositorio Git y aadir contenidoActividad: Descripcin del caso de estudioLista de ContenidosIntroduccin a Git y BitbucketRegistra los cambios realizados sobre un archivo o conjunto de archivos a lo largo del tiempo, de modo que puedas recuperar versiones especficas ms adelante.Facilita el trabajo en paralelo gracias al uso de ramas y de herramientas para combinar versiones diferentes de un mismo documento(merges).Permite revertir archivos a un estado anterior, revertir el proyecto entero a un estado anterior, comparar cambios a lo largo del tiempo, ver quin modific por ltima vez algo que puede estar causando un problema, quin introdujo un error y cundo, y mucho ms.Usar un SVC tambin permite recuperar archivos o parte de archivos perdidos fcilmente.

Sistema de Control de Versiones (SVC)Sistemas locales, centralizados y distribuidos

SVC LocalSVC CentralizadoSistemas locales (ej: rcs)Lleva registro de todos los cambios realizados sobre los archivos a nivel local, en una computadora. No permite el trabajo colaborativo.Sistemas centralizados (ej: CVS, Subversion, Perforce)tienen un nico servidor que contiene todos los archivos versionados, y varios clientes que descargan los archivos desde ese lugar centralSistemas distribuidos (ej: Mercurial, Git, Bazaar, Darcs)los clientes no descargan la ltima instantnea de los archivos sino que replican completamente el repositorio

5Sistemas locales, centralizados y distribuidos

SVC DistribuidoSistemas centralizados (ej: CVS, Subversion, Perforce)tienen un nico servidor que contiene todos los archivos versionados, y varios clientes que descargan los archivos desde ese lugar centralSistemas distribuidos (ej: Mercurial, Git, Bazaar, Darcs)los clientes no descargan la ltima instantnea de los archivos sino que replican completamente el repositorio

6

http://git-scm.com/

Un sistema de control de versiones distribuidoCualquier copia es un repositorio Git completo y autosuficienteNo depende de acceso a la red o de un repositorio central.No es necesario tener un repositorio central, aunque s opcionalPermite intercambio directo entre los repos de diferentes personas sin pasar por el repositorio centralCaractersticasSuper rpidoEficiente (usa poco espacio)Mecanismo de branching y merging sofisticado, muchas opcionesMuy robusto frente a la corrupcin de datosCreado por Linus Torvalds, el creador del ncleo Linux.

Qu es Git?Para hacernos una idea de la eficiencia: Rapidez: Obtener las diferencias de todo el kernel Linux , 74,000 commits, toman aprox. 7 segundos (cold cache) 2.3 seg. (warm cache).Espacio: El repositorio en CVS del Mozilla Project es de 3GB, en Subversion es de 12GB en formato fsfs. EnGit es de 300 Mb8Rama: una rama es una entidad que permite trabajar simultneamente con diferentes instantneas o versiones de un proyecto. Las ramas diferentes a la rama principal, o master, se crean como bifurcaciones de una rama raz, cuyo historial de confirmaciones copian.A partir de su creacin, una rama puede seguir su propio camino, divergiendo ms o menos de su rama de origenEs posible mezclar ramas entre s, e incluso reordenar las diferentes confirmaciones (rebase)Instantnea: una instantnea se refiere al estado concreto del proyecto en un momento determinado, correspondiente a una confirmacin en particular. Cada instantnea (y la confirmacin que la produce) recibe un cdigo SHA-1 (variante de cdigo Hash) que la identifica inequvocamente.Las instantneas se circunscriben a una rama en particular. Conceptos bsicos de GitAqu explicar los conceptos bsicos de Git:El espacio de trajoEl ndice (ndex o stage area)Los repositorios local y remoto (origin o upstream)Los comandos add (aadir, staging), commit (confirmar), push y pullEl stash se puede comentar de pasada, aunque se puede dar un curso de iniciacin a git sin mencionarlo para nada9Conceptos bsicos de Git

Aqu explicar los conceptos bsicos de Git:El espacio de trajoEl ndice (ndex o stage area)Los repositorios local y remoto (origin o upstream)Los comandos add (aadir, staging), commit (confirmar), push , fetch, pull y checkout10https://bitbucket.org/

Almacenamiento de repositorios Git y Mercurial para equipos de desarrollo de software, aunque permite cualquier contenido.Permite repositorios privados sin lmite de cantidadPermite gestin de equipos de trabajo (gratuito hasta 5 miembros)Permite navegar por el cdigo con total libertad, explorando diferentes ramas y momentos temporales (confirmaciones)Gestin de incidenciasPermite mantener una wikiSoporte para compartir archivos adicionales (no versionados)Soporte para divisiones y peticiones de integracin (forks y pull requests)Integracin con herramientas profesionales: Jira, Crucible, Bamboo, Jenkin

Qu es Bitbucket?Crear una cuenta Bitbucket y un repositorio GitCrear una cuenta BitbucketCrear un repositorio Git. Inicialmente estar vaco. A diferencia de SVN Git no distingue entre las copias de trabajo y un repositorio central, todos son repos Git completos.Explorar tu nuevo repositorio para familiarizarte con el entorno.Confirmar direccin de correo electrnico. Cuando se crea una cuenta, Bitbucket enva un correo electrnico para confirmar tu correo electrnico. Confirmar el email es necesario para permitirte subir al repositorio contenido mediante el comando push.

Primeros pasosCrear un repositorio

Introduce el nombre y la descripcinNivel de acceso privadoForks privadosActiva la gestin de incidencias y la wikiNo marques ningn idiomaOpcionalmente puedes permitir el chat integrado (enable hipchat notifications)15Explorar repositorio

1234Cada repositorio tiene los siguientes elementos principales (como se muestra en la figura anterior): La barra de mens se utilizar para navegar por el repositorio. Los botones de accin principal usados para clonar, crear ramas, crear solicitudes de integracin, comparar o dividir (forking). El botn de configuracin del repositorio. Lista de consejos para empezar, la cual se sustituye por las notificaciones de actividad del repositorio una vez que se tiene alguna actividad.

Haga clic en elementos de la barra para ver qu hay detrs de cada uno. Tambin puede navegar utilizando mtodos abreviados de teclado. La lista de mtodos abreviados se puede consultar pulsando ? en el teclado. Haz clic en la seccin de confirmaciones en la barra de navegacin. Vers que no tienes ninguna confirmacin registrada todava, ya que nos creado ningn contenido. Tu repositorio es privado, y no has invitado a nadie, por lo que slo t como propietario puedes crear o editar contenido.16Clonar un repositorio Git y aadir contenidoClonar consiste en realizar una copia completa de un repositorio Git. Tpicamente se realizan clones de un repositorio remoto a un repositorio local.En Bitbucket ve a tu repositorio y pincha en la accin clonar, podrs obtener un enlace con el comando necesario:git clone https://[email protected]/cuenta/gpr.git

Clonar repositorio Git

18Welcome to Git (version 1.9.4-preview20140815)

Run 'git help git' to display the help index.Run 'git help ' to display help for specific commands.

Mario@HAL ~/repos/$ cd repos

$ git clone https://[email protected]/magomar/gpr.gitCloning into 'gpr'...Password for 'https://[email protected]':warning: You appear to have cloned an empty repository.Checking connectivity... done.Clonar repositorio [con Git Bash en Windows]Nota: Git admite varias formas de instalacin en Windows, siendo la ms habitual y la menos intrusiva la que usa un terminal propio, GitBash, para introducir comandos Git. Otra opcin es modificar el entorno para poder invocar comandos Git desde un terminal Windows normal (Cmd)19Mario@HAL ~/repos/gpr (master)$ cd gpr

$ echo Nombre y usuario de Bitbucket" >> participantes.txt

$ git statusOn branch masterInitial commitUntracked files: (use "git add ..." to include in what will be committed)

participantes.txt

nothing added to commit but untracked files present (use "git add" to track)Crear contenidoUntracked files nos indica que hay contenido nuevo que no est siendo seguido por el sistema de gestin de versiones, pues no ha pasado todava al ndex, de momento permanece en el espacio de trabajo

20Aadir contenido al ndiceMario@HAL ~/repos/gpr (master)$ git add participantes.txtwarning: LF will be replaced by CRLF in participantes.txt.The file will have its original line endings in your working directory.

$ git statusOn branch master

Initial commit

Changes to be committed: (use "git rm --cached ..." to unstage)

new file: participantes.txt

master from origin.git add [nombre-archivo] aade contenido especfico,git add -A aade todogit add . aade lo nuevo y lo modificado Git add u aade lo modificado y lo borrado, pero no lo nuevo

21Antes de poder modificar el repositorio (mediante una confirmacin) debemos configurar Git para indicarle la autora de los cambios realizados:

La informacin de configuracin se guarda en el fichero .gitconfig en el directorio home (por defecto ~/.gitconfig). Mas o menos contendr esto:[user] name = Nombre Apellido1 Apellido2 email = [email protected][core] autocrlf = true excludesfile = \\gitignore_global.txtConfigurar Git$ git config --global user.name Nombre Apellido1 Apellido2"$ git config --global user.email [email protected]"22Mario@HAL ~/repos/gpr (master)$ git commit -m 'Confirmacin inicial con participantes.txt'[master (root-commit) 5f7ca45] Confirmacin inicial con participantes.txtwarning: LF will be replaced by CRLF in participantes.txt.The file will have its original line endings in your working directory. 1 file changed, 1 insertion(+) create mode 100644 participantes.txt

$ git statusOn branch masterYour branch is based on 'origin/master', but the upstream is gone. (use "git branch --unset-upstream" to fixup)

nothing to commit, working directory clean

Confirmar cambios en el ndiceAl confirmar los cambios en el ndice, se crea un nuevo snapshot en el repositorio local, el cual permite recuperar el estado del proyecto en el momento de su confirmacin.23Mario@HAL ~/repos/gpr (master)$ git push -u origin masterPassword for 'https://[email protected]':Counting objects: 3, done.Writing objects: 100% (3/3), 260 bytes | 0 bytes/s, done.Total 3 (delta 0), reused 0 (delta 0)To https://[email protected]/magomar/gpr.git * [new branch] master -> masterBranch master set up to track remote branch master from origin.

Subir confirmacin a repo remotoVes a bitbucket y realiza las siguientes comprobacionesEn resumen vers que tienes una sola rama, la rama principal o masterEn fuente vers que slo tienes el archivo participantes.txt. Como es un archivo de texto puedes adems ver su contenido, simplemente pinchando en l.En confirmaciones vers que slo tienes una confirmacin, anotada con el mensaje Confirmacin inicial con participantes.txtEn ramas vers que no hay nada todava, pues slo tienes la rama master.Revisar repositorio en bitbucketEdita el archivo participantes.txt y aade el nombre de otro integrante de tu equipo. Comprueba el estado y vers que aparece como modificado

Editar contenido previamente confirmadoMario@HAL ~/repos/gpr (master)$ git statusOn branch masterYour branch is up-to-date with 'origin/master'.

Changes not staged for commit: (use "git add ..." to update what will be committed) (use "git checkout -- ..." to discard changes in working directory)

modified: participantes.txtMario@HAL ~/repos/gpr (master)$ git commit -a -m "Aade nombres al archivo participantes.txt"warning: LF will be replaced by CRLF in participantes.txt.The file will have its original line endings in your working directory.

Confirmar y subir a repo remotoMario@HAL ~/repos/gpr (master)$ git push origin masterPassword for 'https://[email protected]':Counting objects: 5, done.Nos quedara aadir al ndice y confirmar. Pero tambin podemos haber ambas acciones con un nico comando: commit -aPor ltimo subimos las nuevas confirmaciones al repositorio remotoCommit a aade todos los cambios del workspace que no estn ignorados mediante .gitignore27Ahora puedes explorar de nuevo el repositorio remoto en Bitbucket.Consulta los siguientes apartadosFuente: vers que slo aparece el archivo participantes.txt como un enlace. Sin pinchas en l podrs visualizar su contenido (esto slo es posible para archivos de texto, para binarios solo podremos descargarlos). Confirmaciones: vers que hay 2 confirmacionesExplorar repositorio remotoHistrico de confirmaciones

Explorando el contenido (fuente)

Comparando versiones (diferencias)

Edicin de contenidos en BitbucketDescarga y descomprime el archivo caso_estudio.zip, el cual contiene una descripcin del caso de estudio en formato mark_down, as (caso_estudio.md) como una serie de imgenes en una carpeta denominada media.Copia o mueve ese contenido a la carpeta raz de tu proyecto.Adelo al ndice con usando el comando git add *Confrmalo con el mensaje descripcion del caso de estudioActualiza el repositorio remoto para que contenga los ltimos cambios confirmados.Aadir contenido mltiple al repositorioMario@HAL ~/repos/gpr (master)$ git add *

Mario@HAL ~/repos/gpr (master)$ git statusOn branch masterYour branch is up-to-date with 'origin/master'.

Changes to be committed: (use "git reset HEAD ..." to unstage)

new file: caso_estudio/caso_estudio.md new file: caso_estudio/media/administrador.png new file: caso_estudio/media/conductor_ambulancia.png

Indexando contenido mltipleMario@HAL ~/repos/gpr (master)$ git commit -m "Aade descripcion del caso de estudio"[master 81e0398] Aade descripcion del caso de estudio 8 files changed, 205 insertions(+) create mode 100644 caso_estudio/caso_estudio.md create mode 100644 caso_estudio/media/administrador.png Confirmando y subiendo al remotoMario@HAL ~/repos/gpr (master)$ git push origin masterPassword for 'https://[email protected]':Counting objects: 13, done.Delta compression using up to 8 threads.Compressing objects: 100% (12/12), done.Writing objects: 100% (12/12), 100.78 KiB | 0 bytes/s, done.Total 12 (delta 0), reused 0 (delta 0)To https://[email protected]/magomar/gpr.git a7c2b89..81e0398 master -> master

Seccin de contenido en Bitbucket

1234Entrar en la seccin fuenteElegir rama, master, y entrar en la carpeta caso_EstudioOpcin para crear nuevo contenidoVamos a editar un archivo ya existente, caso_estudio.md Pinchamos para abrirlo36

Edicin de contenido existente12345Adems de ver el contenido del archivo abierto, podemos mostrar tambin las diferencias con respecto a la versin anterior, o ver un resumen del historialNos muestra el HASH (identificador nico) de la ltima confirmacin, yVer todas las confirmaciones permite acceder a todo el historial (log) de confirmaciones previas. Le damos al botn de Editar (la flecha nos permite cambiar el nombre o borrar este archivo), y pasaremos al modo de edicin37Guardando los cambios

1234Aadimos el contenido del archivo casos_uso.md al contenido del archivo, y a continuacin vamos a confirmarVemos que el editor detecta el archivo como de tipo MarkdownTenemos varias opciones relativas al alineamiento y espaciado.Podemos ver las diferencias, y finalmente Podemos elegir entre cancelar todos los cambios o guardarlos mediante su confirmacin (botn azul). Nosotros lo vamos a confirmar, con el mensaje Aade casos de uso al caso de estudio

38

Historial de cambios12345Al pulsar Ver confirmaciones vemos detalles de cada confirmacin y el registro de cambios introducidos en cada confirmacinAutor, SHA y mensaje asociado a la confirmacinInformacin relativa al autor, la confirmacin previa, y opciones para: ver la confirmacin en bruto (texto plano), observar/dejar de observar, y aprobar/desaprobar confirmacin.Seccin de comentarios y campo para aadir comentarioLista resumen de cambios producidos en la confirmacin actualDetalle de todos los cambios producidos en cada uno de los archivos. Se pueden tambin ver las diferencias o el fichero original.

39Actualizacin del repositorio localMario@HAL ~/repos/gpr (master)$ git statusOn branch masterYour branch is behind 'origin/master' by 1 commit, and can be fast-forwarded. (use "git pull" to update your local branch)

nothing to commit, working directory clean

Mario@HAL ~/repos/gpr (master)$ git pull --allFetching originPassword for 'https://[email protected]':Updating 81e0398..d8ab597Fast-forward caso_estudio/caso_estudio.md | 158 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 157 insertions(+), 1 deletion(-)

Si ha cambiado algo en el repositorio remoto y queremos actualizar el repo local para estar en sincrona, debemos hacer un pull:

40