PDF de programación - Introducción al uso de Git

Imágen de pdf Introducción al uso de Git

Introducción al uso de Gitgráfica de visualizaciones

Publicado el 4 de Julio del 2020
318 visualizaciones desde el 4 de Julio del 2020
778,4 KB
57 paginas
Creado hace 9a (28/07/2011)
Introducción al uso de

(Creative Commons Attribution Non-commercial Share Alike 3.0 Spain License)

Iñaki Arenaza
iarenaza@mondragon.edu
@iarenaza

Sistemas de Control de Versiones

Centralizados (CVCS)

Ejemplos: CVS, Subversion, Perforce, SourceSafe, ...

Fuente: http://progit.org/book/ch1-1.html (CC-BY-NC-SA 3.0)

2

Sistemas de Control de Versiones

Distribuidos (DVCS)
Ejemplos: git, Mercurial, Bazaar, BitKeeper,...

Fuente: http://progit.org/book/ch1-1.html (CC-BY-NC-SA 3.0)

3

Diferencias versus instantáneas

Bazaar,
Mercurial*

Fuente: http://progit.org/book/ch1-3.html (CC-BY-NC-SA 3.0)

git,
Mercurial*

Fuente: http://progit.org/book/ch1-3.html (CC-BY-NC-SA 3.0)

4

(Algunas) características de git

(Casi) todas las operaciones son locales
Git tiene integridad fuerte (sha1)
Git (generalmente) sólo añade datos

5

Los tres espacios y tres estados

Fuente: http://progit.org/book/ch1-3.html
(CC-BY-NC-SA 3.0)

Modified*

Staged

Committed

6

Los tres espacios

El directorio (repositorio) es donde git
almacena los metadatos y la base de datos
de objetos para tu proyecto.
El directorio de trabajo es una copia de
trabajo de una versión del proyecto.
El área de preparación (staging area) es un
archivo que almacena información sobre lo
que irá en el próximo commit. Antes se le
llamaba “el índice”.

7

Los tres estados

Confirmado/no modificado (committed): los
datos están almacenados de manera
segura en el directorio.
Modificado (modified): se ha modificado el
archivo pero todavía no se ha confirmado.
Preparado (staged): se ha marcado para
confirmación un archivo modificado en su
versión actual.

8

Los “tres + 1” estados

El estado

3+1

Fuente: http://progit.org/book/ch2-2.html (CC-BY-NC-SA 3.0)

9

Terminología de git

En los ejemplos siguientes $GIT_DIR
contiene la ruta de un repositorio git dado
objeto: unidad de almacenamiento en git.
Se identifica de forma unívoca por el SHA1 de su
contenido.
Por tanto, un objeto es inmutable.

10

Tipos de objetos de git

blob: objeto sin tipo, para guardar el
contenido de un fichero. “Un fichero”.
tree: lista de nombres y permisos, junto con
las referencias de objetos blob o tree
asociados. “Un directorio”.

11

Tipos de objetos de git

commit: información de una revisión dada.
Incluye:

los padres del objeto,
la persona que ha realizado el commit de la
revisión,
el autor de la revisión,
la fecha de la misma,
un mensaje asociado,
el objeto tree que corresponde al directorio raíz de
la revisión.

12

Tipos de objetos de git

tag: identifica de forma simbólica a otros
objetos y puede ser usado para firmar
éstos. Contiene:

el nombre y tipo de otro objeto,
un nombre simbólico (el de la propia tag)
puede contener un mensaje asociado.
opcionalmente puede incluir una firma (PGP). En
este último caso se denomina un "objeto de
etiqueta firmada".

13

Terminología de git (cont.)

nombre de objeto o identificador de objeto:
identificador único del objeto (de 40 bytes con
la representación hexadecimal del SHA1 de su contenido)
base de datos de objetos: almacena un
conjunto de objetos (habitualmente en
$GIT_DIR/objects/).
ref o referencia: cadena de 40 bytes con la
representación hexadecimal de un SHA1, o
un nombre simbólico (que se almacena en
$GIT_DIR/refs/) que denota un objeto
particular.

14

Terminología de git (cont.)

revisión: estado concreto de una serie de
ficheros y directorios que ha sido
almacenado en la base de datos de
objetos. Se hace referencia a él por medio
de un objeto commit.
padre: un objeto commit contiene una lista
(potencialmente vacía) de objetos commit
que representan a sus predecesores lógicos
en la línea de desarrollo, esto es, sus
ancestros.

15

Tipos de objetos de git

Fuente: http://progit.org/book/ch3-1.html (CC-BY-NC-SA 3.0)

16

Tipos de objetos de git

Fuente: http://progit.org/book/ch3-1.html (CC-BY-NC-SA 3.0)

17

Terminología de git (cont.)

repositorio: colección de referencias junto
con una base de datos de objetos tiene
todos los objetos que son alcanzables
desde dichas referencias.:

Puede contener además algunos meta datos
adicionales usados por determinas órdenes de git.
Puede contenier una copia de trabajo de una
revisión.

repositorio desnudo (bare): repositorio que
no tiene una copia de trabajo.

Los de control de git que normalmente estarían
presentes en el subdirectorio oculto .git están
presentes en el propio directorio del repositorio.

18

Terminología de git (cont.)

árbol de trabajo o copia de trabajo: Una
revisión extraida del repositorio, para poder
trabajar con ella.
índice: una colección de ficheros con
información de stat(2), cuyos contenidos
están almacenados como objetos.

El índice es una versión almacenada del árbol de
trabajo.

19

Terminología de git (cont.)

rama: línea activa de desarrollo.

El commit más reciente de una rama se denomina
la punta de dicha rama. La punta de la rama se
referencia por medio de una cabeza.
La copia de trabajo está siempre asociada a una
rama (la rama "actual" o "checked out") y la
cabeza especial “HEAD” apunta a esa rama.

cabeza: una referencia con nombre, que
apunta al objeto commit de la punta de una
rama.

Las cabezas se almacenan en $GIT_DIR/refs/heads/,
(salvo que se usen referencias empaquetadas).

20

Terminología de git (cont.)

checkout: acción de actualizar parte o todo
el árbol de trabajo con un objeto árbol o
blob desde la base de datos de objeto

Además actualiza el índice y la referencia HEAD si
se ha cambiado de rama.

21

Terminología de git (cont.)

1

Estado “inicial”

2

$ git branch testing

3

master sigue siendo
la rama activa en la
copia de trabajo

4

$ git checkout testing

testing pasa a ser la
rama activa en la
copia de trabajo

Fuente: http://progit.org/book/ch3-1.html (CC-BY-NC-SA 3.0)

22

Terminología de git (cont.)

2

$ git add some-file(s)
$ git commit -m ...

$ git checkout master

1

3

$ git add some-file(s)
$ git commit -m ...

Fuente: http://progit.org/book/ch3-1.html (CC-BY-NC-SA 3.0)

23

Terminología de git (cont.)

merge: fusionar los contenidos de otra
rama (potencialmente desde un repositorio
externo) en la rama actual.

Si la rama es de otro repositorio, primero se hace
un fetch* de la rama y después se fusiona en la
rama actual.
La fusión puede crear un nuevo objeto commit si
una de las ramas no es un ancestro de la otra.
Si una es ancestro de la otra, simplemente se
mueve la referencia de la cabeza de la rama
fusionada (fast-forward merge).

24

merge: escenario 1

2

$ git branch hotfix master
$ git checkout hotfix
$ git add ….
$ git commit

1

3

$ git checkout master
$ git merge hotfix

Fuente: http://progit.org/book/ch3-2.html (CC-BY-NC-SA 3.0)

25

merge: escenario 2

1

3

$ git checkout -b iss53 master
$ git add ….
$ git commit
$ git checkout master
$ git add ….
$ git commit

2

$ git merge iss53

Fuente: http://progit.org/book/ch3-2.html (CC-BY-NC-SA 3.0)

26

$ git branch mdl21-nested-groups mdl21-ldap-refactor

Operaciones en el área de trabajo
Crear nuevas ramas locales (ultra rápido
y baratísimo en disco):
Extraer una rama al área de trabajo:
Consultar la rama activa:
Mostrar el estado del área de trabajo:
Marcar cambios para commit:

$ git checkout mdl21-nested-groups

$ git branch

$ git status

$ git add fichero1 fichero2 ...
$ git rm fichero3 fichero4 ...

27

Operaciones en el área de trabajo
Mostrar diferencias con el índice o con HEAD:

$ git diff
$ git diff HEAD

Mostrar diferencias con otras ramas:

$ git commit

$ git diff MOODLE_21_STABLE
$ git diff MOODLE_21_STABLE..mdl21-ldap-refactor
Hacer commit de los cambios (marcados):
Usar gitk para visualizar el historial de una rama:
Usar gitk para visualizar el historial de todas las
ramas:

$ gitk mdl21-nested-group

$ gitk --all

28

Terminología de git (cont.)

clone: obtener una copia local completa* de un
repositorio git remoto.

* las cabezas de
las ramas remotas
son inamovibles**

Fuente: http://progit.org/book/ch3-5.html (CC-BY-NC-SA 3.0)

29

Terminología de git (cont.)

fetch: obtener la cabeza de una rama (o
varias) desde un repositorio remoto,
copiando los objetos falten y moviendo
la(s) cabeza(s) remota(s).

1

2

Fuente: http://progit.org/book/ch3-5.html (CC-BY-NC-SA 3.0)

30

Terminología de git (cont.)

pull: hacer un fetch seguido de un merge,
con una rama remota dada.
push: enviar los objetos de la rama local
que no están en la rama remota a la que
hace referencia el pull, y actualizar la
cabeza de la rama remota.

Es la acción complementaria de pull.
Si la cabeza de la rama remota no es un ancestro
de la cabeza de la rama local, el push falla*.

31

Operaciones en el área de trabajo

Clonar un repositorio “remoto”:

$ git clone git://git.moodle.org/moodle.git
$ git clone ssh://iarenaza@git.moodle.org/moodle.git
$ git clone http://git.moodle.org/moodle.git
$ git clone git@github.com:iarenaza/moodle.git
$ git clone /ruta/a/moodle.git /ruta/a/otro-moodle.git
$ git clone -o moodle.git git@github.com:iarenaza/moodle.git

32

Operaciones en el área de trabajo
Incorporar nueva rama del repositorio remoto
al repositorio local:
$ git fetch moodle.git
$ git branch mdl21-enrol-database-refactor \
moodle.git/mdl21-enrol-database-refactor
Enviar ramas locales al repositorio remoto:
$ git push moodle.git mdl21-nested-groups
$ git push moodle.git +mdl21-nested-groups
$ git push moodle.git mdl21-nested-groups:mdl21-nestgrp
Configurar rama para poder hacer pull desde
repositorio remoto:
$ git config branch.mdl21-nested-groups.remote \
moodle.git
$ git config branch.mdl21-nested-groups.merge \
refs/heads/mdl21-nested-groups

33

Terminología de git (cont.)

rebase: re-aplicar una serie de cambios
desde una rama en la cabeza de otra rama
diferente, y hacer que la cabeza de esa
otra rama apunte al resultado.

¡OJO! Rescribe el historial de la rama.
Puede ser problemático en ramas publicadas en
repositorios rem
  • Links de descarga
http://lwp-l.com/pdf17869

Comentarios de: Introducción al uso de Git (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad