Vous êtes sur la page 1sur 18

Tema: II

git
Practicas.
Herramientas Avanzadas para el Desarrollo de Aplicaciones
Departamento de Lenguajes y Sistemas Inform
aticos
Universidad de Alicante

Curso 2012-2013 , Copyleft 2011-2013 .


Reproduccion permitida bajo los terminos de la licencia de
documentaci
on libre GNU.

1 / 18

Contenido
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

Primeros pasos con git


Modificacion de archivos (I)
Modificacion de archivos (II)
A
nadido de archivos
Log del repositorio
Borrado de archivos
Deshacer acciones (I)
Deshacer acciones (II)
Renombrar ficheros
Ramas: Actual, crear, cambiar de rama, diferencias
Ramas: Deferencias a nivel de commits
Ejercicio con ramas
Ramas: mezclar, rebasar
Clonado de repositorios
Objetivos...
Entrega...
2 / 18

Primeros pasos con git

# Comprobad la version instalada


git -- version

7
9

11
13

# Partimos del codigo de la practica 1 del juego de


adivinar un numero
# Creamos el repositorio inicial para poner bajo
control de versiones
# los archivos de ese proyecto .
cd Juego ; git init
# Anyadimos al repositorio los archivos del
directorio actual y subdir ectorios
git add .
# Comprobamos el estado despues de anyadirlos
git status
# Confirmamos que los hemos anyadido ( commit )
git commit -m Primer commit . -m " Descripcion
detallada . " -a

3 / 18

Modificacion de archivos (I)

2
4

# Modificamos algun archivo


gedit main . vala Makefile
# Vemos las diferencias de la copia de trabajo con
el repositorio
git diff

# aceptamos los cambios , podemos hacerlo de varias


maneras :
8
10

# 1 - Archivo a archivo
git commit -m " Correccion de errores en el prog .
ppal . " main . vala
git commit -m " Anyadido objetivo de depuracion . "
Makefile

4 / 18

Modificacion de archivos (II)

3
5
7

# 2 - Preparamos el escenario o stage que


formara el commit
# A
git add Makefile
git commit -m " Modificado Makefile . "
# B
git add Makefile main . vala
git commit -m " Un solo commit con varios archivos . "

5 / 18

Anadido de archivos

# Creamos el archivo
gedit autores . txt

3
5
7

# Lo anyadimos ...
git add autores . txt
# Confirmamos el anyadido ...
git commit -m " fichero autores . txt " autores . txt

9
11

# Que archivos hay bajo control de versiones ?


git ls - files

6 / 18

Log del repositorio


1

# Que o p e r a c i o n e s hemos h e c h o s o b r e e l
git log

repositorio ?

3
5

commit d b a f c c 7 7 1 e b 5 0 4 a 5 4 1 d b 3 2 d 7 a 7 b 5 2 8 7 a 4 7 0 5 1 6 a a
A u t h o r : hada <h a d a @ d l s i . ua . es>
Date :
F r i Jan 20 1 8 : 2 6 : 2 2 2012 +0100

# HEAD

7
fichero autores . txt
9
11

commit 18442 c 5 3 6 9 b 1 f 6 f 7 9 2 0 a 4 e b e a 3 9 e c 3 8 b f 9 b 6 2 5 5 5
A u t h o r : hada <h a d a @ d l s i . ua . es>
Date :
F r i Jan 20 1 7 : 5 4 : 4 8 2012 +0100

# HEAD1

13
Cambios a l m a k e f i l e .
15
17

commit e 3 9 1 1 a 1 7 7 8 c 4 0 5 e c c e 1 4 b a e 1 c 1 a 9 7 e c 8 1 8 3 2 2 4 2 b
A u t h o r : hada <h a d a @ d l s i . ua . es>
Date :
F r i Jan 20 1 7 : 5 4 : 1 2 2012 +0100

# HEAD2

19
21

# Cada commit t i e n e s u numero SHA1 p r o p i o


# Los numeros SHA1 s e pueden r e s u m i r h a s t a que s e a n d i s t i n g u i b l e s
# Podemos r e f e r i r n o s a l u l t i m o commit h e c h o ( e l p r i m e r o de l a l i s t a ) p o r e l
a l i a s : HEAD

23
25
27
29

# E t i q u e t a m o s HEAD con v1 . 0 y HEAD1 con v0 . 9


g i t t a g v1 . 0
g i t t a g v0 . 9 HEAD1
g i t t a g l
# Lo v i s u a l i z a m o s g r a f i c a m e n t e con g i t k
gitk

7 / 18

Borrado de archivos

# Borramos el archivo
git rm autores . txt

3
5
7

# Vemos el estado del repositorio


git status
# Confirmamos el borrado ...
git commit -m " fichero autores . txt borrado "

9
11

# Que dice el log del repositorio ?


git log

15

commit 5 a 3 6 9 a c d e f c 3 c 1 d 2 8 c 7 d 1 c 9 5 6 1 f 7 b b 2 6 d 9 d a e a d 3
Author : hada < hada@dlsi . ua . es >
Date :
Fri Jan 20 18:41:56 2012 +0100

17

Archivo autores . txt borrado .

13

8 / 18

Deshacer acciones (I)

# Borramos e l a r c h i v o
g i t rm a u t o r e s . t x t
g i t commit . . .

4
# NOOO ! ! ! e s un e r r o r ! ! ! ,

l o puedo r e c u p e r a r ?

6
8
10
12

# Que d i c e e l l o g d e l r e p o s i t o r i o ?
git log
commit 5 a 3 6 9 a c d e f c 3 c 1 d 2 8 c 7 d 1 c 9 5 6 1 f 7 b b 2 6 d 9 d a e a d 3
A u t h o r : hada <h a d a @ d l s i . ua . es>
Date :
F r i Jan 20 1 8 : 4 1 : 5 6 2012 +0100

14

Archivo autores . txt borrado .

16
18

commit d b a f c c 7 7 1 e b 5 0 4 a 5 4 1 d b 3 2 d 7 a 7 b 5 2 8 7 a 4 7 0 5 1 6 a a
A u t h o r : hada <h a d a @ d l s i . ua . es>
Date :
F r i Jan 20 1 8 : 2 6 : 2 2 2012 +0100

20

C o r r e c c i o n de e r r o r e s .

# HEAD

# HEAD1

9 / 18

Deshacer acciones (II)


Hay varias formas de hacerlo, usaremos git revert:
1
3

# r e v e r t e d e s h a c e un commit c r e a n d o un commit i n v e r s o
# con l a o p c i o n n h a c e t o d o menos c r e a r e l commir i n v e r s o
# l o hacemos a s i p a r a v e r p a s o a p a s o e l e s t a d o d e l r e p o s i t o r i o
g i t r e v e r t n HEAD

5
git status
7
9
11
13
15

# On b r a n c h m a s t e r
# Changes t o be co mm it te d :
#
( u s e g i t r e s e t HEAD <f i l e > . . . t o u n s t a g e )
#
#
new f i l e :
autores . txt
#
# Que d i c e AUN e l l o g d e l r e p o s i t o r i o ?
git log

17
19

commit 5 a 3 6 9 a c d e f c 3 c 1 d 2 8 c 7 d 1 c 9 5 6 1 f 7 b b 2 6 d 9 d a e a d 3
A u t h o r : hada <h a d a @ d l s i . ua . es>
Date :
F r i Jan 20 1 8 : 4 1 : 5 6 2012 +0100

# HEAD

21
Archivo autores . txt borrado .
23
# PREGUNTA : Que h a b r i a que h a c e r a h o r a ?
25
27

# O t r a f o r m a de h a c e r l o : g i t r e s e t
# I n v e s t i g a que h a c e y t r a t a de u s a r l o p a r a r e s o l v e r e s t a s i t u a c i o n .

10 / 18

Renombrar ficheros

g i t mv a u t o r e s . t x t AUTHORS
git status
# On b r a n c h m a s t e r
# Changes t o be c om mi tt e d :
#
( u s e g i t r e s e t HEAD <f i l e > . . . t o u n s t a g e )
#
#
renamed :
a u t o r e s . t x t > AUTHORS

# PREGUNTA : Que h a b r i a que h a c e r a h o r a ?

3
5

11

# S o l o un commit que a b a r q u e l a o p e r a c i o n de r e n o m b r a d o
g i t commit m " Renombrado archivo autores . txt a AUTHORS . "

11 / 18

Ramas: Actual, crear, cambiar de rama, diferencias

# Comprobar l a a c t u a l , r e m o t a s o t o d a s
g i t b r a n c h [ r ] [a ]
master

4
6
8
10
12

# C r e a r una rama l l a m d a d e v e l b a s a d a en l a a c t u a l
g i t branch d e v e l
# Ramas e x i s t e n t e s , en l a que e s t a m o s l l e v a un
g i t branch
devel
master
# Cambiar a d e v e l
g i t checkout devel
Switched to branch devel

14
16
18

# Comprueba que e s t a s en l a rama d e v e l


# Haz c a m b i o s en AUTHORS a q u i y g u a r d a l o s ( commit )
# c a m b i a t e de nuevo a m a s t e r
g i t checkout master
Switched to branch master

20
22
24

# D i f e r e n c i a s e n t r e d e v e l y m a s t e r ( e s t a m o s en m a s t e r )
git d i f f devel
# o tambien
g i t d i f f master d e v e l
g i t d i f f d e v e l master

12 / 18

Ramas: Diferencias a nivel de commits.

Lo hacemos con git log [-p]


1
3
5
7
9
11
13

# Podemos v e r l a s de v a r i a s m a n er a s
g i t l o g m a s t e r . . d e v e l # rama o r i g e n e s m a s t e r , rama d e s t i n o e s d e v e l
g i t log d e v e l . . master
g i t log master . .
# rama o r i g e n e s m a s t e r , rama d e s t i n o l a a c t u a l
g i t log . . master
# rama o r i g e n l a a c t u a l , rama d e s t i n o m a s t e r
# t a m b i e n podemos e m p l e a r showb r a n c h , p . e . :
g i t showb r a n c h m a s t e r d e v e l
! [ m a s t e r ] Renombrado a r c h i v o .
[ d e v e l ] Cambios en README.

[ d e v e l ] Cambios en README.
+ [ m a s t e r ] Renombrado a r c h i v o .

13 / 18

Ejercicio con ramas

A estas alturas debes haber creado la rama devel.


Debes estar trabajando en ella y no en master.
Modifica los archivos necesarios para que en el juego se permita un

n
umero maximo de intentos para adivinar el n
umero, por ejemplo 3.
Al finalizar esta parte debes tener todos los cambios incorporados a la

rama devel (haber hecho el o los commits necesarios)

14 / 18

Ramas: mezclar, rebasar

Supongamos que queremos pasar nuestros cambios de la rama devel

a master.
Tenemos dos opciones: mezclarlas o rebasarlas
1
3
5

# Opcion M e z c l a
g i t merge d e v e l
U p d a t i n g d d e e b d c . . 6 4 6 eba9
F a s tf o r w a r d
README |
1 +
1 f i l e s changed , 1 i n s e r t i o n s (+) , 0 d e l e t i o n s ()

7
9
11

# Opcion R e b a s e
git rebase devel
F i r s t , r e w i n d i n g head t o r e p l a y y o u r work on t o p o f i t . . .
F a s tf o r w a r d e d m a s t e r t o d e v e l .

15 / 18

Clonado de repositorios
Nos permite copiar un repositorio local o remotamente (http/s, ssh,

git, git+ssh).
Se establece un enlace entre ambos que permite realizar operaciones

pull, fetch, merge y push.


1

# c l o n a e l r e p o s i t o r i o con e l c o d i g o de l a p r a c t i c a 0
# l o hacemos en un d i r e c t o r i o l l a m a d o p r a c t i c a 1 b
g i t c l o n e Ju eg o Juegob
C l o n i n g i n t o Juegob . . .
done .

cd Juegob ;

# S i i n t e n t a m o s h a c e r un push o b t e n d r e m o s un e r r o r . E l r e p o s i t o r i o o r i g e n
# c o n t i e n e c o p i a de t r a b a j o ( no e s b a r e s o l o d i r e c t o r i o . g i t )

ls

# d e b e e s t a r t o d o c o p i at r a b a j o + r e p o s i t o r i o

(. git )

El clonado de repositorios es muy util cuando se clona un repositorio solo


con datos (bare) y no con copia de trabajo.

16 / 18

Objetivos...
El alumno sabe:
 Crear un repositorio con git y a
nadir los archivos que
pondra bajo control de versiones.
 Hacer commits de las acciones que lleve acabo
(modificaciones en archivos, a
nadido de nuevos archivos,
borrado de archivos, renombrado de archivos, etc. . . )
 Ver el log de las acciones llevadas a cabo.
 Poner etiquetas a una determinada version de los archivos.
 Deshacer acciones, p.e. recuperar un archivo borrado.
 Crear ramas, cambiar de rama, ver diferencias entre las
ramas.
 Importar cambios de una rama a otra.
 Clonar repositorios.
17 / 18

Entrega...

La entrega de esta pr
actica consiste en el directorio de trabajo

(Juego) comprimido en un fichero llamado juego.tgz.


Recuerda que este directorio ya contiene la copia de trabajo y el

directorio .git.

18 / 18

Vous aimerez peut-être aussi