SlideShare ist ein Scribd-Unternehmen logo
1 von 90
Downloaden Sie, um offline zu lesen
Subversión (SVN)
Al grano!
Olaf Reitmaier Veracierta
Diciembre de 2013
Versión 5
Subversión
Subversion (SVN)

Referencias
●

http://subversion.apache.org/

●

svnbook.red-bean.com/

●

http://en.wikipedia.org/wiki/Apache_Subversion

●

●

http://biz30.timedoctor.com/git-mecurial-and-cvscomparison-of-svn-software/
http://subversion.tigris.org/
Subversión
Subversion (SVN)

Fundamentos
Control de Versiones
Subversion (SVN)
index.php

Sinónimos:
●

Versioning

●

Revision Control

●

<?php

Source Control

●

Código
Fuente &
Binarios

¿Contenido?

Version Control

echo “hola”;

Qué?
Quién?
Cuándo?
Por Qué?

exit(1);

●

Software Configuration Management

●

Configuration Management

●

Máquina
del Tiempo

Source Code Management

●

Source Code Control

¿Backup?

Log
¡Auditoría!
Términos (Versioning)
Subversion (SVN)

Sustantivos:
●
●

●
●
●
●
●

Verbos:

Workflow / Log

Checkout / Clone

●

Change / Commit

●

Update / Pull

●

Import / Push
Brach / Tag

●

Version / Revision /
ChangeSets

●

●

Repository / Working Copy

Track / Change

●

Merge / Revert

Trunk / Parent / Root
Branch / Tag
Head / Base
Status / Conflict

Frases → ¿Sintaxis? → Comandos
Historia de Subversión
Subversion (SVN)
●

●

●

●

●

Motivo reemplazar el conflictivo CVS
y descartar el uso de lock-modify-unlock
con un nuevo mecanismo copy-modify-merge
Control y revisión de versiones de código fuente
Creado en 14 meses por CollabNet y publicado como
software de código abierto
Escrito en “C” liberado en Octubre de 2000
Disponible en Apache Incubator desde 2009 con
licenciamiento Apache compatible con GNU/GPL

●

Subversion aka (also known as) SVN

●

Versiones comúnes: ..., 1.6.X, 1.7.X y 1.8.5 (Última)
Historia de Subversión
Subversion (SVN)

Mecanismo
Copy->Modify->Merge
6

Branches

9

11

15 16

Merges

2
1
Trunk

3

7
4

8

Discontinued
development branch

10
5

Tags

12

14
13
Características
Subversion (SVN)

Ventajas:
●

Nuevo sistema basado en CVS

●

Incluye operaciones atómicas

●

Economía en operaciones con ramas (copias)

●

Gran variedad de plugins para IDE clientes
Desventajas:

●

Es lento en comparación con otras soluciones

●

No usa modelo distribuido (ni P2P)

●

Comandos insuficientes para gestionar el repositorio

●

Todavía contiene bugs al renombrar archivos y directorios
GUI
Subversion (SVN)

Herramientas CLI (Línea de comandos):
●

Subversion Tools for Linux (svn*)

●

Subversion for Windows (svn*)
Herramientas GUI:

●

Tortoise SVN (Windows), Eclipse Subversive Plugin
(Linux/Windows), RabbitVCS (Linux), WebSVN,
(Linux/Windows), Rapid SVN (Linux), Easy SVN (a
RabitSVN fork)
Arquitectura de Subversión
Subversion (SVN)
GUI
Subversion
Tools
(TortoiseSVN,
Eclipse IDE)

Código Fuente
Versión Inicial
app/
CLI
Subversion
Tools
(svn *)

svn:

svnserve
(ssh?)

http(s):
API
Cliente
Subversion

apache
(ssl?)

API
Servidor
Subversion

TCP/IP
dav
dav_svn

Acceso
SVN

Acceso
SVN
Local
Copia de Trabajo

“.svn”
Modificaciones de
Archivos y Directorios

Repositorio
NO
Acceso Directo
!Cuidado!
BDB

FSFS
Flujo de Trabajo
Subversion (SVN)
Commit = Commit & Push

Subversion

Import
Checkout
2
Update

4
3
Modify

1

Working
Copy

Commit

Log

¿Merge, Branch, Tag?
=> Otros Flujos de Trabajo

5

A
Local
Left

Conflict

B
Remote
Right

Repository

Log
Comandos (CLI)
Subversion (SVN)

●
●

svnadmin

Abreviaturas

svn: add, cat, changelist (cl), checkout (co), cleanup,
commit (ci), copy (cp), delete (del, remove, rm), diff
(di), export, help (?, h), import, info, list (ls),
lock, log, merge, mergeinfo, mkdir, move (mv,
rename, ren), propdel (pdel, pd), propedit (pedit,
pe), propget (pget, pg), proplist (plist, pl), propset
(pset, ps), resolve, resolved, revert, status (stat, st),
switch (sw), unlock, update (up)
Rutas (CLI)
Subversion (SVN)

●

PATH (Local)
. (Default)

–

.., ./workingcopy/, workingcopy/, workingcopy

–

/home/user/workingcopy/

–
●

URL (Local / Remoto):
–

file:///home/user/repository (Local)

–

http://server/repositories/repository/subfolder

–

svn://server/repositories/repository/subfolder

–

ssh://server/repositories/repository/subfolder (CIFRADO)

–

https://server/repositories/repository/subfolder (CIFRADO)
Crear un Repositorio
Subversion (SVN)

●

svnadmin create /home/oreitmaier/repository

●

ls -l /home/oreitmaier/repository

●

svn list file:///home/oreitmaier/repository
Crear un Repositorio
Subversion (SVN)

NO
Acceso Directo
!Cuidado!

Repositorio

BDB

FSFS
Estructura de Repositorio
Subversion (SVN)

svn mkdir file:///home/oreitmaier/repository/{trunk,branches,tags}
/home/oreitmaier/
Repository
repository/

branches/

Recomendado!
No Obligatorio!

Ramas

tags/

Versiones Etiquetadas

trunk/

Última Versión Estable

¡Estos subdirectorios tienen las mismas propiedades
que cualquier otro directorio en el repositorio!
Importar al Repositorio
Subversion (SVN)

●

svn import -m "Inicial" app
file:///home/oreitmaier/repository/trunk

1° Vez
/home/oreitmaier/

repository/trunk
Import
app/
Importar al Repositorio
Subversion (SVN)

●

svn import -m "Initial Import" app
file:///home/oreitmaier/repository

Sin
“trunk”
x ahora

/home/oreitmaier/

repository/
Import
app/
Visualizar el Repositorio
Subversion (SVN)

NO
Acceso Directo
!Cuidado!

Repositorio

BDB

FSFS
Visualizar el Repositorio
Subversion (SVN)

¿Copia de Trabajo?
Resumen
Subversion (SVN)

●

svnadmin
–

●

create: Crear un repositorio

svn
–

import: Importar versión inicial

–

list (ls): Visualizar árbol del repositorio “remoto”

–

cat: Visualizar contenido de archivo

–

help [comando]: Ayuda
Flujo de Trabajo (Branching)
Subversion (SVN)

●

svn co file:///home/oreitmaier/repository/trunk
/home/oreitmaier/app

/home/oreitmaier/

repository/trunk

checkout (co)

Checkout
myapp/
Flujo de Trabajo (Working Copy)
Subversion (SVN)

●

svn co file:///home/oreitmaier/repository myapp

Copia de Trabajo
myapp/

r1

Sin
“trunk”
x ahora
Flujo de Trabajo (Tracking)
Subversion (SVN)
Copia de Trabajo
Myapp/

Tracked Change!
¿Untracked Change?
Flujo de Trabajo (Tracking)
Subversion (SVN)

¿Untracked Change?
Manual Track
Tracked Change
Self-Tracked Change
All Changes are Tracked
Flujo de Trabajo (Commit)
Subversion (SVN)

Delete Uncommited Change => Lost Change!
Flujo de Trabajo (Commit)
Subversion (SVN)
File deleted without SVN command!

File not commited!

File commited!
Flujo de Trabajo (Commit MSG)
Subversion (SVN)

Breve y expresivo Mensaje de COMMIT:
- Título al estilo Tweet (140 caracteres)
- Seguido de un ”Abstract”
Flujo de Trabajo (Revisions)
Subversion (SVN)

●

svn [co|diff|log|update] -r REVISION:
–

NÚMERO: número de la revisión

–

{FECHA}: revisión al comienzo de la fecha ISO-8601

–

HEAD: lo último del repositorio

–

BASE: Revisión base del ítem de la copia de trabajo.

–

COMMITTED: Último commit en o antes de BASE.

–

PREV: Revisión justo antes de COMMITED.
Flujo de Trabajo (Revisions)
Subversion (SVN)

●

svn <comando> -r {FECHA}:
–

{"2006-02-17 15:30"}

–

{"2006-02-17 15:30 +0230"}

–

{2006-02-17}

–

{15:30}

–

… en formato ISO-8601
Flujo de Trabajo (Revisions)
Subversion (SVN)

●

svn <comando> -r <REVISION>:
HEAD
r1

r2

r3

PREV

Repositorio
01/12

01/12

03/12

…

Ana
Commit
r1

Nelly
Checkout
r1

Ana
Commit
r2

Copia de Trabajo

BASE
r1

BASE
r1

BASE
r2

Línea
de Tiempo

COMMITED
04/12

05/12

Leo
Checkout
r2

Ana
Commit
r3

Nelly
Checkout
r3

BASE
r2

BASE
r3

BASE
r3

03/12
Resumen
Subversion (SVN)

●

svn
–

checkout (co): hacer una copia local

–

add: seguir la pista en la copia local

–

mkdir: crear un directorio

–

rm: dejar de seguir la pista y eliminar en la copia local

–

status: determinar el estado de la copia local

–

log: determinar el histórico de cambios en el repositorio

–

commit: guardar los cambios en el repositorio
Flujos de Trabajo (1+N)
Subversion (SVN)

Usuario 1 → Revisión 4
Flujos de Trabajo (1+N)
Subversion (SVN)

Usuario 2 → Revisión 4
Flujos de Trabajo (Conflicto)
Subversion (SVN)

Usuario 1 → Revisión 5

Usuario 2 → Revisión 6

¡Aparece un Conflicto!
Flujos de Trabajo (Conflicto)
Subversion (SVN)
Jerarquías
Last
Commiter

Last
Commiter
Last
Commiter

Commiter
No Requiere
Aprobación
Requiere
Acuerdo

Commiter

Requiere
Aprobación

Commiter

Cantidad de Desarrolladores y de Cambios
Flujos de Trabajo (Conflicto)
Subversion (SVN)

¿(p) postpone?
Flujos de Trabajo (Conflicto)
Subversion (SVN)

Postponed
Repositorio
repository/

r5

Copia de Trabajo
myapp2/

r4
index.php.r4
<?php
echo "Hola";
exit(1);
// Comentario
Otro

index.php.mine
<?php
echo "Hola";
exit(1);
// Comentario
Otro
//2

BASE

MINE (MIS)
mine-conflict
mine-full

index.php

WORKING

Copia de Trabajo
myapp/

r5
index.php.r5
<?php
echo "Hola";
exit(1);
// Comentario
Otro
//1

THEIR (SUS)
their-conflict
their-full

Last
Commiter
Flujos de Trabajo (Resolve)
Subversion (SVN)

Alternativa #1
Fusión (Merge)

Commiter
Edita el archivo
para resolver
el Conflicto
Flujos de Trabajo (Resolve)
Subversion (SVN)

Alternativa #1
Fusión (Merge)
Commiter
Marca como
Resuelto el
Conflicto

Commiter
Guarda los
Cambios
Flujos de Trabajo (Resolve)
Subversion (SVN)

Alternativa #2
Sobreescribir el
Repositorio
Flujos de Trabajo (Pareja)
Subversion (SVN)

Alternativa #3 - Descartar Mis Cambios
Commiter
Descarta
Sus
Cambios!

Discard Change on Update => Lost Change!
Subversión
Subversion (SVN)

Complementos
Flujos de Trabajo (Branching)
Subversion (SVN)

Antes de hacer “svn import” (al trunk) se debe crear
la estructura de directorios (recomendada):
●

svn mkdir file:///home/oreitmaier/repository/{trunk,branches,tags}
Historia de Subversión
Subversion (SVN)

Mecanismo
Copy->Modify->Merge
6

Branches

9

11

15 16

Merges

2
1
Trunk

3

7
4

8

Discontinued
development branch

10
5

Tags

12

14
13

Merge:
- Normal (Unidireccional)
- Reintegration (Bidireccional)
Flujos de Trabajo (Branching)
Subversion (SVN)

Branch/Tag (svn copy)

Working Copy
app/

1

2
Working Copy
mybranch/

Checkout Branch (svn [co|up])
Repository
Merge Trunk (svn merge)

3

app/trunk
app/branches/mybranch
app/tags/mytag

Checkout Trunk (svn [co|up])
4
Working Copy
mynewtrunk/

Reintegrate Branch (svn merge)
5

2.1 / 4.1

Update (svn update)

3.1 / 5.1

Commit (svn commit)
Flujo de Trabajo (Branching)
Subversion (SVN)

●

●

En una copia local ^/ es igual a la raíz de la URL del
repositorio file:///home/oreitmaier/repository
svn copy ^/trunk ^/branches/mybranch -m “MyBranch”
/home/oreitmaier/

repository/trunk

repository/branches/mybranch

Copy
Flujo de Trabajo (Branching)
Subversion (SVN)

●

svn co file:///home/oreitmaier/repository todo -m “todo”

¡Cuidado con hacer Checkout/Commit de la ROOT!
Flujo de Trabajo (Branching)
Subversion (SVN)

●

svn co ^/braches/mybranch mybranch
/home/oreitmaier/

repository/branches/mybranch

mybranch/

Checkout
Flujo de Trabajo (Branching)
Subversion (SVN)

●

svn co file:///home/oreitmaier/repository todo -m “todo”

¡Cuidado con hacer Checkout/Commit de la ROOT!
Flujo de Trabajo (Branching)
Subversion (SVN)

2 Proyectos
2 Trunks (ROOTs)
1 Branch
Flujo de Trabajo (Branching)
Subversion (SVN)

REVISION “r” ES UN NÚMERO ÚNICO
Flujo de Trabajo (Branching)
Subversion (SVN)

User

Copia de Trabajo

calc/
BRANCH
Flujo de Trabajo (Branching)
Subversion (SVN)

Sally

Copia de Trabajo
calc/
TRUNK
Flujo de Trabajo (Reintegrate)
Subversion (SVN)

Regularmente sincronizarse con el TRUNK, es decir,
fusionar el TRUNK con (→) MYBRANCH:
●

cd /home/oreitmaier/mybranch

●

svn update

●

svn merge ^/trunk

●

svn diff (Corregir Sintácticos / Semánticos / Probar)

●

svn revert . -R (¿Revertir el merge?)

●

svn commit -m "Fusione el trunk con (→) mybranch"
Flujo de Trabajo (Reintegrate)
Subversion (SVN)

●

Si en una fusión del TRUNK con (→) MYBRANCH aparece
el error:
–

svn merge ^/trunk
●

●

svn: E195020: Cannot merge into mixed-revision working copy [357:378];
try up

Debe hacerse una actualización e intentar de nuevo:
–

svn update

–

svn merge ^/trunk

–

svn commit -m "Fusión final del trunk con (->) mybranch"
Flujo de Trabajo (Reintegrate)
Subversion (SVN)

Para fusionar MYBRANCH con (→) el TRUNK (no se podrá modificar más
mybranch):
–
–

cd mytrunk

–

svn update

–

svn merge --reintegrate ^/branches/mybranch

–

svn diff (Corregir Sintácticos / Semánticos / Probar)

–

●

svn co file:///home/oreitmaier/repository/trunk mytrunk

svn revert . -R (¿Revertir el merge?)

Corregir sintácticos, semánticos y probar para luego:
–
–

●

svn commit -m "Fusión de mybranch al (→) trunk"
svn mergeinfo ^/branches/mybranch ^/trunk

Final y opcionalmente (No se pierden datos):
–

svn delete ^/repository/branches/mybranch -m "mybranch reintegrada al trunk"
Flujo de Trabajo (Keep Alive Branch)
Subversion (SVN)

Mantener Activa Una Rama Reintegrada
r2

r6

B

MyBranch

r3
C

F

Spurious (False)
Conflicts On
Merge

OK

Trunk

A

D

E

G

r1

r4

r5

r7

Bloquear Cambios “D” por “CherryPicking”
Flujo de Trabajo (Alive Branch)
Subversion (SVN)

Si se desea continuar usando la rama es necesario hacer un
trabajo adicional (D=r4, versión del merge de la rama):
●

svn co file:///home/oreitmaier/repository/branches/mybranch
mybranch

●

cd mybranch

●

svn update

●

svn merge --record-only -c 4 ^/trunk
svn commit -m "Blocking r4 into my branch"
Flujo de Trabajo (Branching)
Subversion (SVN)

●

●

●

Se puede pensar que una rama es diferente y es tratada
como algo diferente pero no es así, es un directorio que
tiene información histórica adicional.
Subversion no tiene un concepto interno de rama, sólo
sabe como hacer copias de directorios, el significado se lo
da el usuario.
Debido a lo anterior, no es necesario que las ramas estén en
el directorio branches/ ó tags/. Se puede establecer
cualquier estructura, a diferencia de otros gestores de
versiones en donde las ramas tiene propiedades adicionales.
Flujo de Trabajo (Ignore)
Subversion (SVN)

●

echo “archivo.txt” > ignoring.txt

●

echo “tmp” >> ignoring.txt

●

svn propset svn:ignore -F ignoring.txt .

●

rm ingoring.txt

●

svn commit -m "Rutas a ignorar"
Flujo de Trabajo (Export)
Subversion (SVN)

●

svn export: “clonar la copia local y eliminar la
metadadata (directorios ocultos .svn), es decir,
preparar versión para colocar en producción.
Subversion (Changelist & Switch)
●

●

svn changelist: agrupar archivos y permitir hacer
commit solo de dichos archivos con svn commit - changelist, no todos los clientes lo soportan.
svn switch: cambiar el URL del repositorio para
trabajar en un mirror.
Flujo de Trabajo (Locking)
Subversion (SVN)

Existen tres (3) tipos de bloqueos (locks):
–

Bloqueo manuales: con el comando svn lock y svn unlock que
aparecen con la letra K cuando se ejecuta svn status.

–

Bloqueos internos en la copia de trabajo: utilizados por subversion
para prevenir que varios clientes entren en conflicto mientras acceden a
la misma Working Copy, y aparece con la letra L en la tercera
columna de un svn status, se eliminan con el comando svn cleanup.

–

Bloqueos internos de bases de datos: utilizados por el motor de base
de datos BDB para prevenir conflictos entre múltiples programas
tratando de acceder a la base de datos. Este tipo de errores se produce
cuando hay persistencia de datos después de un error provocan que el
repositorio se bloquee.
Flujo de Trabajo (Locking)
Subversion (SVN)

●

●

Subversion existe para evitar tener que hacer LOCK
aunque a veces sea necesario hacer un svn lock,
modificar y liberar con svn unlock.
Bloquear simplemente impide que el archivo sea
versionado (commited) durante un período de
tiempo por un usuario diferente a quien bloqueó el
archivo.
Subversion
Subversion (SVN)

Eclipse IDE
Subversive Plugin
Subversion + Eclipse
Subversion (SVN)

●

●

●

●

●

Plugin: Subversive
Eclipse Menu → Window → Preferences → General →
Network Connections →+Proxy Entries, Active Provider:
Manual → Apply → OK.
Eclipse Menu → About → Install new software → Work
With → All Available Sites → Search: svn
Select and Install: Subversive SVN Team Provider
(Incubation)
Restart
Eclipse Subversive Plugin
Subversion (SVN)
Eclipse Subversive Plugin
Subversion (SVN)

●

Eclipse Projects -> “Prueba” → Team → Share
Project → SVN (First Time!) → SVN Kit 1.3.5.
Eclipse Subversive Plugin
Subversion (SVN)

Project (Right Clic) > Team > Share Project...

/trunk

svn import
¿svnadmin create?
Eclipse Subversive Plugin
Subversion (SVN)

File > New Project > SVN > Project from SVN

svn co
Eclipse Subversive Plugin
Subversion (SVN)

File > New Project > SVN > Project from SVN

svn co
Eclipse Subversive Plugin
Subversion (SVN)

File > New Project > SVN > Project from SVN

svn co
Eclipse Subversive Plugin
Subversion (SVN)

Team > Add to Version Control

svn add
Tracking
Eclipse Subversive Plugin
Subversion (SVN)

Team > Commit...

svn commit -m “Mensaje”
Eclipse Subversive Plugin
Subversion (SVN)

Team > Update to Revision …

svn update -r
Subversion + Eclipse
Team > Revert...

Revert = Descartar Cambios Locales!!! = No Backup!!!

svn revert
Subversion + Eclipse
Team > Show History

*=BASE

svn log
Eclipse Subversive Plugin
Subversion (SVN)

Team > Branch / Tag

svn copy

Después de crear la rama
hay que hacer un svn co
de la misma como un
Nuevo Proyecto SVN
para poder trabajar
con ella porque no
funciona siempre
el proceso automático
Eclipse Subversive Plugin
Subversion (SVN)

Team > Merge

svn merge
Eclipse Subversive Plugin
Subversion (SVN)

Team > Merge (Reintegrate)
svn merge –reintegrate

svn merge
Eclipse Subversive Plugin
Subversion (SVN)
BRANCH

Team > Show
History
svn merge ^/trunk

TRUNK

svn merge –reintegrate ^/branches/maria
Eclipse Subversive Plugin
Subversion (SVN)

Window > Preferences > Team > SVN

svn merge
Eclipse Subversive Plugin
Subversion (SVN)

Team > Disconnect
Eclipse Subversive Plugin
Subversion (SVN)

Team > Export (Pase a Producción)

Duplicar Copia Local
y Eliminar .svn/
Subversion
Subversion (SVN)

Alternativas
Alternativas
Subversion (SVN)

●

Bazaar

●

Mercurial

●

Git
Bazaar
Subversion (SVN)
●

Promovido por Canonical.com (La gente detrás de Ubuntu/Linux).

●

Escrito en C.

●

●

Adaptabilidad y soporte directo para más flujos de trabajos que permite una
fácil colaboración, mejor fusión integrada con repositorio distribuidos.
Fácil de administrar y configurar, operación fuera de línea.

●

Mejor soporte para cambio de nombres.

●

Soportó desde sus inicios Windows.

●

●
●

Integración con Launchpad.net un entorno colaborativo (teams, mailing list,
release managment, code hosting and reviews, web based translations,
FAQ, bug tracking, Web Service API).
Economía de operaciones mejor que mercurial pero peor que Git
SVN tiene soporte para copiar mientras que Bazaar sólo permite mover
archivos.
Mercurial
Subversion (SVN)

●

Independiente de la plataforma (Python)

●

Más fácil que aprender que Git, pero más difícil que Subversion.

●

Subversion permite hacer tracking de metadatos de archivos.

●

Mejor documentación.

●

Modelo distribuido,

●

No permite fusionar dos parents.

●

Basado en extensiones en vez de scripts

●

Subversion permite bloqueo de archivos, Mercurial no.

●

Menos funcionalidades y menos tiempo en el mercado.
Git
Subversion (SVN)

●

Usado para mantener el Kernel de Linux.

●

Escrito en C.

●

Grande para los que odian CVS/SVN.

●

Incremento dramático en la velocidad de operación.

●

Economía en operaciones de branching.

●

Disponibilidad de todo el árbol de historial fuera de línea.

●

Modelo distribuido P2P

●

Hay una curva de aprendizaje para aquellos acostumbrados a SVN

●

No es óptimo para desarrolladores solitarios

●

Soporte limitado para Windows comparado con Linux

Weitere ähnliche Inhalte

Was ist angesagt?

Taller de Base de datos - Unidad 1 SGBD introduccion
Taller de Base de datos - Unidad 1 SGBD introduccionTaller de Base de datos - Unidad 1 SGBD introduccion
Taller de Base de datos - Unidad 1 SGBD introduccionJosé Antonio Sandoval Acosta
 
MANUAL DE PRACTICAS DE LINUX (Alberto Hdz)
MANUAL DE PRACTICAS DE LINUX (Alberto Hdz) MANUAL DE PRACTICAS DE LINUX (Alberto Hdz)
MANUAL DE PRACTICAS DE LINUX (Alberto Hdz) Alberto Hdz
 
Lava autos diagrama e.r
Lava autos diagrama e.rLava autos diagrama e.r
Lava autos diagrama e.rivancio2
 
Apache Cassandra - Base de datos
Apache Cassandra - Base de datosApache Cassandra - Base de datos
Apache Cassandra - Base de datosZteeven Zalinas
 
Diagrama de Flujo de Datos (DFD)
Diagrama de Flujo de Datos (DFD)Diagrama de Flujo de Datos (DFD)
Diagrama de Flujo de Datos (DFD)Yaskelly Yedra
 
CreacióN De Objetos En MySQL
CreacióN De Objetos En MySQLCreacióN De Objetos En MySQL
CreacióN De Objetos En MySQLalexmerono
 
Bases distribuidas en mysql
Bases distribuidas en mysqlBases distribuidas en mysql
Bases distribuidas en mysqlGiovanni Peruch
 
Arquitectura de software para aplicaciones móviles
Arquitectura de software para aplicaciones móvilesArquitectura de software para aplicaciones móviles
Arquitectura de software para aplicaciones móvilesSergio Castillo Yrizales
 
Modelo de Desarrollo. Modelo por Etapas
Modelo de Desarrollo. Modelo por EtapasModelo de Desarrollo. Modelo por Etapas
Modelo de Desarrollo. Modelo por Etapasyeimy26
 
Documentacion de las pruebas normas y certificaciones de software.
Documentacion de las pruebas normas y certificaciones de software.Documentacion de las pruebas normas y certificaciones de software.
Documentacion de las pruebas normas y certificaciones de software.Isabel Gómez
 
BASES DE DATOS RELACIONALES (ejercicios)
BASES DE DATOS RELACIONALES (ejercicios) BASES DE DATOS RELACIONALES (ejercicios)
BASES DE DATOS RELACIONALES (ejercicios) j3palacios
 
Introducción a Foundation 5
Introducción a Foundation 5Introducción a Foundation 5
Introducción a Foundation 5Cycle-IT
 
Diccionario de base de datos
Diccionario de base de datosDiccionario de base de datos
Diccionario de base de datosalexis armas
 
Generación código intermedio 2
Generación código intermedio 2Generación código intermedio 2
Generación código intermedio 2Humano Terricola
 

Was ist angesagt? (20)

Taller de Base de datos - Unidad 1 SGBD introduccion
Taller de Base de datos - Unidad 1 SGBD introduccionTaller de Base de datos - Unidad 1 SGBD introduccion
Taller de Base de datos - Unidad 1 SGBD introduccion
 
MANUAL DE PRACTICAS DE LINUX (Alberto Hdz)
MANUAL DE PRACTICAS DE LINUX (Alberto Hdz) MANUAL DE PRACTICAS DE LINUX (Alberto Hdz)
MANUAL DE PRACTICAS DE LINUX (Alberto Hdz)
 
Lava autos diagrama e.r
Lava autos diagrama e.rLava autos diagrama e.r
Lava autos diagrama e.r
 
Bases de Datos No Relacionales (NoSQL): Cassandra, CouchDB, MongoDB y Neo4j
Bases de Datos No Relacionales (NoSQL): Cassandra, CouchDB, MongoDB y Neo4jBases de Datos No Relacionales (NoSQL): Cassandra, CouchDB, MongoDB y Neo4j
Bases de Datos No Relacionales (NoSQL): Cassandra, CouchDB, MongoDB y Neo4j
 
Apache Cassandra - Base de datos
Apache Cassandra - Base de datosApache Cassandra - Base de datos
Apache Cassandra - Base de datos
 
Diagrama de Flujo de Datos (DFD)
Diagrama de Flujo de Datos (DFD)Diagrama de Flujo de Datos (DFD)
Diagrama de Flujo de Datos (DFD)
 
Ejercicios Entidad - Relacion
Ejercicios Entidad - RelacionEjercicios Entidad - Relacion
Ejercicios Entidad - Relacion
 
CreacióN De Objetos En MySQL
CreacióN De Objetos En MySQLCreacióN De Objetos En MySQL
CreacióN De Objetos En MySQL
 
Clase 3
Clase 3Clase 3
Clase 3
 
Bases distribuidas en mysql
Bases distribuidas en mysqlBases distribuidas en mysql
Bases distribuidas en mysql
 
Arquitectura de software para aplicaciones móviles
Arquitectura de software para aplicaciones móvilesArquitectura de software para aplicaciones móviles
Arquitectura de software para aplicaciones móviles
 
Modelo de Desarrollo. Modelo por Etapas
Modelo de Desarrollo. Modelo por EtapasModelo de Desarrollo. Modelo por Etapas
Modelo de Desarrollo. Modelo por Etapas
 
Ciclo de vida de un Sistema
Ciclo de vida de un SistemaCiclo de vida de un Sistema
Ciclo de vida de un Sistema
 
Documentacion de las pruebas normas y certificaciones de software.
Documentacion de las pruebas normas y certificaciones de software.Documentacion de las pruebas normas y certificaciones de software.
Documentacion de las pruebas normas y certificaciones de software.
 
BASES DE DATOS RELACIONALES (ejercicios)
BASES DE DATOS RELACIONALES (ejercicios) BASES DE DATOS RELACIONALES (ejercicios)
BASES DE DATOS RELACIONALES (ejercicios)
 
Introducción a Foundation 5
Introducción a Foundation 5Introducción a Foundation 5
Introducción a Foundation 5
 
Bases de datos NoSQL en entornos Big Data
Bases de datos NoSQL en entornos Big DataBases de datos NoSQL en entornos Big Data
Bases de datos NoSQL en entornos Big Data
 
Diccionario de base de datos
Diccionario de base de datosDiccionario de base de datos
Diccionario de base de datos
 
Proyectobd
ProyectobdProyectobd
Proyectobd
 
Generación código intermedio 2
Generación código intermedio 2Generación código intermedio 2
Generación código intermedio 2
 

Ähnlich wie Subversion v6

Sistemas de control de versiones. Introducción a svn
Sistemas de control de versiones. Introducción a svnSistemas de control de versiones. Introducción a svn
Sistemas de control de versiones. Introducción a svnmiguelolivan
 
Charla svn subversion
Charla svn subversionCharla svn subversion
Charla svn subversionunsijslide
 
Presentación SUbversion
Presentación SUbversionPresentación SUbversion
Presentación SUbversionrxif914u41
 
Presentacion Subversion
Presentacion SubversionPresentacion Subversion
Presentacion SubversionCesar Yanez
 
Haciendo copias de seguridad de todo el conocimiento humano con python y soft...
Haciendo copias de seguridad de todo el conocimiento humano con python y soft...Haciendo copias de seguridad de todo el conocimiento humano con python y soft...
Haciendo copias de seguridad de todo el conocimiento humano con python y soft...Jaime Crespo
 
Gestión de configuración distribuída para la plataforma de Canaima
Gestión de configuración distribuída para la plataforma de Canaima Gestión de configuración distribuída para la plataforma de Canaima
Gestión de configuración distribuída para la plataforma de Canaima Ernesto Crespo
 
Uso de git para el mantenimiento de parches locales o públicos
Uso de git para el mantenimiento  de parches locales o públicosUso de git para el mantenimiento  de parches locales o públicos
Uso de git para el mantenimiento de parches locales o públicosIñaki Arenaza
 
PostgreSQL: Un motor Impulsado por una comunidad
PostgreSQL: Un motor Impulsado por una comunidadPostgreSQL: Un motor Impulsado por una comunidad
PostgreSQL: Un motor Impulsado por una comunidadSantiago Zarate
 
Magallanes, Herramienta de despliegue PHP sencilla y poderosa
Magallanes, Herramienta de despliegue PHP sencilla y poderosa�Magallanes, Herramienta de despliegue PHP sencilla y poderosa�
Magallanes, Herramienta de despliegue PHP sencilla y poderosaFco Javier Núñez Berrocoso
 
Introducción a Git
Introducción a GitIntroducción a Git
Introducción a GitSergio Rus
 
Ansible administracion simplificada
Ansible   administracion simplificada Ansible   administracion simplificada
Ansible administracion simplificada bcoca
 
Curso Micro Tema 2
Curso Micro Tema 2Curso Micro Tema 2
Curso Micro Tema 2Luis Zurita
 
PostgreSQL À la Debian
PostgreSQL À la DebianPostgreSQL À la Debian
PostgreSQL À la DebianLeonardo Cezar
 
PostgreSQL À la Debian
PostgreSQL À la DebianPostgreSQL À la Debian
PostgreSQL À la DebianLeonardo Cezar
 
Control De Cambios (Scm)
Control De Cambios (Scm)Control De Cambios (Scm)
Control De Cambios (Scm)UJAP
 

Ähnlich wie Subversion v6 (20)

Sistemas de control de versiones. Introducción a svn
Sistemas de control de versiones. Introducción a svnSistemas de control de versiones. Introducción a svn
Sistemas de control de versiones. Introducción a svn
 
Charla svn subversion
Charla svn subversionCharla svn subversion
Charla svn subversion
 
Charla mspba
Charla mspbaCharla mspba
Charla mspba
 
Desarrollo Subversivo
Desarrollo SubversivoDesarrollo Subversivo
Desarrollo Subversivo
 
Presentación SUbversion
Presentación SUbversionPresentación SUbversion
Presentación SUbversion
 
Presentacion Subversion
Presentacion SubversionPresentacion Subversion
Presentacion Subversion
 
Haciendo copias de seguridad de todo el conocimiento humano con python y soft...
Haciendo copias de seguridad de todo el conocimiento humano con python y soft...Haciendo copias de seguridad de todo el conocimiento humano con python y soft...
Haciendo copias de seguridad de todo el conocimiento humano con python y soft...
 
Gestión de configuración distribuída para la plataforma de Canaima
Gestión de configuración distribuída para la plataforma de Canaima Gestión de configuración distribuída para la plataforma de Canaima
Gestión de configuración distribuída para la plataforma de Canaima
 
Uso de git para el mantenimiento de parches locales o públicos
Uso de git para el mantenimiento  de parches locales o públicosUso de git para el mantenimiento  de parches locales o públicos
Uso de git para el mantenimiento de parches locales o públicos
 
PostgreSQL: Un motor Impulsado por una comunidad
PostgreSQL: Un motor Impulsado por una comunidadPostgreSQL: Un motor Impulsado por una comunidad
PostgreSQL: Un motor Impulsado por una comunidad
 
Magallanes, Herramienta de despliegue PHP sencilla y poderosa
Magallanes, Herramienta de despliegue PHP sencilla y poderosa�Magallanes, Herramienta de despliegue PHP sencilla y poderosa�
Magallanes, Herramienta de despliegue PHP sencilla y poderosa
 
Procesos
ProcesosProcesos
Procesos
 
Respaldos con Rsync
Respaldos con RsyncRespaldos con Rsync
Respaldos con Rsync
 
Introducción a Git
Introducción a GitIntroducción a Git
Introducción a Git
 
Ansible administracion simplificada
Ansible   administracion simplificada Ansible   administracion simplificada
Ansible administracion simplificada
 
Curso Micro Tema 2
Curso Micro Tema 2Curso Micro Tema 2
Curso Micro Tema 2
 
PostgreSQL À la Debian
PostgreSQL À la DebianPostgreSQL À la Debian
PostgreSQL À la Debian
 
PostgreSQL À la Debian
PostgreSQL À la DebianPostgreSQL À la Debian
PostgreSQL À la Debian
 
Mercurial
MercurialMercurial
Mercurial
 
Control De Cambios (Scm)
Control De Cambios (Scm)Control De Cambios (Scm)
Control De Cambios (Scm)
 

Mehr von Olaf Reitmaier Veracierta

Bandwidth control approach - Cisco vs Mikrotik on Multitenancy
Bandwidth control approach - Cisco vs Mikrotik on MultitenancyBandwidth control approach - Cisco vs Mikrotik on Multitenancy
Bandwidth control approach - Cisco vs Mikrotik on MultitenancyOlaf Reitmaier Veracierta
 
Arquitectura de Referencia - BGP - GSLB - SLB
Arquitectura de Referencia - BGP - GSLB - SLBArquitectura de Referencia - BGP - GSLB - SLB
Arquitectura de Referencia - BGP - GSLB - SLBOlaf Reitmaier Veracierta
 
Estrategia para Despliegue de Contenedores (Agile/DevOps)
Estrategia para Despliegue de Contenedores (Agile/DevOps)Estrategia para Despliegue de Contenedores (Agile/DevOps)
Estrategia para Despliegue de Contenedores (Agile/DevOps)Olaf Reitmaier Veracierta
 

Mehr von Olaf Reitmaier Veracierta (20)

PoC Azure Administration
PoC Azure AdministrationPoC Azure Administration
PoC Azure Administration
 
RabbitMQ Status Quo Critical Review
RabbitMQ Status Quo Critical ReviewRabbitMQ Status Quo Critical Review
RabbitMQ Status Quo Critical Review
 
AWS Graviton3 and GP3
AWS Graviton3 and GP3AWS Graviton3 and GP3
AWS Graviton3 and GP3
 
Kubernetes Workload Rebalancing
Kubernetes Workload RebalancingKubernetes Workload Rebalancing
Kubernetes Workload Rebalancing
 
KubeAdm vs. EKS - The IAM Roles Madness
KubeAdm vs. EKS - The IAM Roles MadnessKubeAdm vs. EKS - The IAM Roles Madness
KubeAdm vs. EKS - The IAM Roles Madness
 
AWS Cost Optimizations Risks
AWS Cost Optimizations RisksAWS Cost Optimizations Risks
AWS Cost Optimizations Risks
 
AWS Network Architecture Rework
AWS Network Architecture ReworkAWS Network Architecture Rework
AWS Network Architecture Rework
 
SRE Organizational Framework
SRE Organizational FrameworkSRE Organizational Framework
SRE Organizational Framework
 
Insight - Architecture Design
Insight - Architecture DesignInsight - Architecture Design
Insight - Architecture Design
 
Bandwidth control approach - Cisco vs Mikrotik on Multitenancy
Bandwidth control approach - Cisco vs Mikrotik on MultitenancyBandwidth control approach - Cisco vs Mikrotik on Multitenancy
Bandwidth control approach - Cisco vs Mikrotik on Multitenancy
 
Transparent Layer 2 Bandwidth Shaper
Transparent Layer 2 Bandwidth ShaperTransparent Layer 2 Bandwidth Shaper
Transparent Layer 2 Bandwidth Shaper
 
Arquitectura de Referencia - BGP - GSLB - SLB
Arquitectura de Referencia - BGP - GSLB - SLBArquitectura de Referencia - BGP - GSLB - SLB
Arquitectura de Referencia - BGP - GSLB - SLB
 
Backup aaS Solution Architecture
Backup aaS Solution ArchitectureBackup aaS Solution Architecture
Backup aaS Solution Architecture
 
Presentación de Arquitectura en la Nube
Presentación de Arquitectura en la NubePresentación de Arquitectura en la Nube
Presentación de Arquitectura en la Nube
 
Distributed Web Cluster (LAPP)
Distributed Web Cluster (LAPP)Distributed Web Cluster (LAPP)
Distributed Web Cluster (LAPP)
 
Multi-Cloud Connection Architecture
Multi-Cloud Connection ArchitectureMulti-Cloud Connection Architecture
Multi-Cloud Connection Architecture
 
Managed Cloud Services Revision
Managed Cloud Services RevisionManaged Cloud Services Revision
Managed Cloud Services Revision
 
Ingeniería de Software
Ingeniería de SoftwareIngeniería de Software
Ingeniería de Software
 
Estrategia para Despliegue de Contenedores (Agile/DevOps)
Estrategia para Despliegue de Contenedores (Agile/DevOps)Estrategia para Despliegue de Contenedores (Agile/DevOps)
Estrategia para Despliegue de Contenedores (Agile/DevOps)
 
On-Premise Private Cloud Architecture
On-Premise Private Cloud ArchitectureOn-Premise Private Cloud Architecture
On-Premise Private Cloud Architecture
 

Subversion v6

  • 1. Subversión (SVN) Al grano! Olaf Reitmaier Veracierta Diciembre de 2013 Versión 5
  • 4. Control de Versiones Subversion (SVN) index.php Sinónimos: ● Versioning ● Revision Control ● <?php Source Control ● Código Fuente & Binarios ¿Contenido? Version Control echo “hola”; Qué? Quién? Cuándo? Por Qué? exit(1); ● Software Configuration Management ● Configuration Management ● Máquina del Tiempo Source Code Management ● Source Code Control ¿Backup? Log ¡Auditoría!
  • 5. Términos (Versioning) Subversion (SVN) Sustantivos: ● ● ● ● ● ● ● Verbos: Workflow / Log Checkout / Clone ● Change / Commit ● Update / Pull ● Import / Push Brach / Tag ● Version / Revision / ChangeSets ● ● Repository / Working Copy Track / Change ● Merge / Revert Trunk / Parent / Root Branch / Tag Head / Base Status / Conflict Frases → ¿Sintaxis? → Comandos
  • 6. Historia de Subversión Subversion (SVN) ● ● ● ● ● Motivo reemplazar el conflictivo CVS y descartar el uso de lock-modify-unlock con un nuevo mecanismo copy-modify-merge Control y revisión de versiones de código fuente Creado en 14 meses por CollabNet y publicado como software de código abierto Escrito en “C” liberado en Octubre de 2000 Disponible en Apache Incubator desde 2009 con licenciamiento Apache compatible con GNU/GPL ● Subversion aka (also known as) SVN ● Versiones comúnes: ..., 1.6.X, 1.7.X y 1.8.5 (Última)
  • 7. Historia de Subversión Subversion (SVN) Mecanismo Copy->Modify->Merge 6 Branches 9 11 15 16 Merges 2 1 Trunk 3 7 4 8 Discontinued development branch 10 5 Tags 12 14 13
  • 8. Características Subversion (SVN) Ventajas: ● Nuevo sistema basado en CVS ● Incluye operaciones atómicas ● Economía en operaciones con ramas (copias) ● Gran variedad de plugins para IDE clientes Desventajas: ● Es lento en comparación con otras soluciones ● No usa modelo distribuido (ni P2P) ● Comandos insuficientes para gestionar el repositorio ● Todavía contiene bugs al renombrar archivos y directorios
  • 9. GUI Subversion (SVN) Herramientas CLI (Línea de comandos): ● Subversion Tools for Linux (svn*) ● Subversion for Windows (svn*) Herramientas GUI: ● Tortoise SVN (Windows), Eclipse Subversive Plugin (Linux/Windows), RabbitVCS (Linux), WebSVN, (Linux/Windows), Rapid SVN (Linux), Easy SVN (a RabitSVN fork)
  • 10. Arquitectura de Subversión Subversion (SVN) GUI Subversion Tools (TortoiseSVN, Eclipse IDE) Código Fuente Versión Inicial app/ CLI Subversion Tools (svn *) svn: svnserve (ssh?) http(s): API Cliente Subversion apache (ssl?) API Servidor Subversion TCP/IP dav dav_svn Acceso SVN Acceso SVN Local Copia de Trabajo “.svn” Modificaciones de Archivos y Directorios Repositorio NO Acceso Directo !Cuidado! BDB FSFS
  • 11. Flujo de Trabajo Subversion (SVN) Commit = Commit & Push Subversion Import Checkout 2 Update 4 3 Modify 1 Working Copy Commit Log ¿Merge, Branch, Tag? => Otros Flujos de Trabajo 5 A Local Left Conflict B Remote Right Repository Log
  • 12. Comandos (CLI) Subversion (SVN) ● ● svnadmin Abreviaturas svn: add, cat, changelist (cl), checkout (co), cleanup, commit (ci), copy (cp), delete (del, remove, rm), diff (di), export, help (?, h), import, info, list (ls), lock, log, merge, mergeinfo, mkdir, move (mv, rename, ren), propdel (pdel, pd), propedit (pedit, pe), propget (pget, pg), proplist (plist, pl), propset (pset, ps), resolve, resolved, revert, status (stat, st), switch (sw), unlock, update (up)
  • 13. Rutas (CLI) Subversion (SVN) ● PATH (Local) . (Default) – .., ./workingcopy/, workingcopy/, workingcopy – /home/user/workingcopy/ – ● URL (Local / Remoto): – file:///home/user/repository (Local) – http://server/repositories/repository/subfolder – svn://server/repositories/repository/subfolder – ssh://server/repositories/repository/subfolder (CIFRADO) – https://server/repositories/repository/subfolder (CIFRADO)
  • 14. Crear un Repositorio Subversion (SVN) ● svnadmin create /home/oreitmaier/repository ● ls -l /home/oreitmaier/repository ● svn list file:///home/oreitmaier/repository
  • 15. Crear un Repositorio Subversion (SVN) NO Acceso Directo !Cuidado! Repositorio BDB FSFS
  • 16. Estructura de Repositorio Subversion (SVN) svn mkdir file:///home/oreitmaier/repository/{trunk,branches,tags} /home/oreitmaier/ Repository repository/ branches/ Recomendado! No Obligatorio! Ramas tags/ Versiones Etiquetadas trunk/ Última Versión Estable ¡Estos subdirectorios tienen las mismas propiedades que cualquier otro directorio en el repositorio!
  • 17. Importar al Repositorio Subversion (SVN) ● svn import -m "Inicial" app file:///home/oreitmaier/repository/trunk 1° Vez /home/oreitmaier/ repository/trunk Import app/
  • 18. Importar al Repositorio Subversion (SVN) ● svn import -m "Initial Import" app file:///home/oreitmaier/repository Sin “trunk” x ahora /home/oreitmaier/ repository/ Import app/
  • 19. Visualizar el Repositorio Subversion (SVN) NO Acceso Directo !Cuidado! Repositorio BDB FSFS
  • 20. Visualizar el Repositorio Subversion (SVN) ¿Copia de Trabajo?
  • 21. Resumen Subversion (SVN) ● svnadmin – ● create: Crear un repositorio svn – import: Importar versión inicial – list (ls): Visualizar árbol del repositorio “remoto” – cat: Visualizar contenido de archivo – help [comando]: Ayuda
  • 22. Flujo de Trabajo (Branching) Subversion (SVN) ● svn co file:///home/oreitmaier/repository/trunk /home/oreitmaier/app /home/oreitmaier/ repository/trunk checkout (co) Checkout myapp/
  • 23. Flujo de Trabajo (Working Copy) Subversion (SVN) ● svn co file:///home/oreitmaier/repository myapp Copia de Trabajo myapp/ r1 Sin “trunk” x ahora
  • 24. Flujo de Trabajo (Tracking) Subversion (SVN) Copia de Trabajo Myapp/ Tracked Change! ¿Untracked Change?
  • 25. Flujo de Trabajo (Tracking) Subversion (SVN) ¿Untracked Change? Manual Track Tracked Change Self-Tracked Change All Changes are Tracked
  • 26. Flujo de Trabajo (Commit) Subversion (SVN) Delete Uncommited Change => Lost Change!
  • 27. Flujo de Trabajo (Commit) Subversion (SVN) File deleted without SVN command! File not commited! File commited!
  • 28. Flujo de Trabajo (Commit MSG) Subversion (SVN) Breve y expresivo Mensaje de COMMIT: - Título al estilo Tweet (140 caracteres) - Seguido de un ”Abstract”
  • 29. Flujo de Trabajo (Revisions) Subversion (SVN) ● svn [co|diff|log|update] -r REVISION: – NÚMERO: número de la revisión – {FECHA}: revisión al comienzo de la fecha ISO-8601 – HEAD: lo último del repositorio – BASE: Revisión base del ítem de la copia de trabajo. – COMMITTED: Último commit en o antes de BASE. – PREV: Revisión justo antes de COMMITED.
  • 30. Flujo de Trabajo (Revisions) Subversion (SVN) ● svn <comando> -r {FECHA}: – {"2006-02-17 15:30"} – {"2006-02-17 15:30 +0230"} – {2006-02-17} – {15:30} – … en formato ISO-8601
  • 31. Flujo de Trabajo (Revisions) Subversion (SVN) ● svn <comando> -r <REVISION>: HEAD r1 r2 r3 PREV Repositorio 01/12 01/12 03/12 … Ana Commit r1 Nelly Checkout r1 Ana Commit r2 Copia de Trabajo BASE r1 BASE r1 BASE r2 Línea de Tiempo COMMITED 04/12 05/12 Leo Checkout r2 Ana Commit r3 Nelly Checkout r3 BASE r2 BASE r3 BASE r3 03/12
  • 32. Resumen Subversion (SVN) ● svn – checkout (co): hacer una copia local – add: seguir la pista en la copia local – mkdir: crear un directorio – rm: dejar de seguir la pista y eliminar en la copia local – status: determinar el estado de la copia local – log: determinar el histórico de cambios en el repositorio – commit: guardar los cambios en el repositorio
  • 33. Flujos de Trabajo (1+N) Subversion (SVN) Usuario 1 → Revisión 4
  • 34. Flujos de Trabajo (1+N) Subversion (SVN) Usuario 2 → Revisión 4
  • 35. Flujos de Trabajo (Conflicto) Subversion (SVN) Usuario 1 → Revisión 5 Usuario 2 → Revisión 6 ¡Aparece un Conflicto!
  • 36. Flujos de Trabajo (Conflicto) Subversion (SVN) Jerarquías Last Commiter Last Commiter Last Commiter Commiter No Requiere Aprobación Requiere Acuerdo Commiter Requiere Aprobación Commiter Cantidad de Desarrolladores y de Cambios
  • 37. Flujos de Trabajo (Conflicto) Subversion (SVN) ¿(p) postpone?
  • 38. Flujos de Trabajo (Conflicto) Subversion (SVN) Postponed Repositorio repository/ r5 Copia de Trabajo myapp2/ r4 index.php.r4 <?php echo "Hola"; exit(1); // Comentario Otro index.php.mine <?php echo "Hola"; exit(1); // Comentario Otro //2 BASE MINE (MIS) mine-conflict mine-full index.php WORKING Copia de Trabajo myapp/ r5 index.php.r5 <?php echo "Hola"; exit(1); // Comentario Otro //1 THEIR (SUS) their-conflict their-full Last Commiter
  • 39. Flujos de Trabajo (Resolve) Subversion (SVN) Alternativa #1 Fusión (Merge) Commiter Edita el archivo para resolver el Conflicto
  • 40. Flujos de Trabajo (Resolve) Subversion (SVN) Alternativa #1 Fusión (Merge) Commiter Marca como Resuelto el Conflicto Commiter Guarda los Cambios
  • 41. Flujos de Trabajo (Resolve) Subversion (SVN) Alternativa #2 Sobreescribir el Repositorio
  • 42. Flujos de Trabajo (Pareja) Subversion (SVN) Alternativa #3 - Descartar Mis Cambios Commiter Descarta Sus Cambios! Discard Change on Update => Lost Change!
  • 44. Flujos de Trabajo (Branching) Subversion (SVN) Antes de hacer “svn import” (al trunk) se debe crear la estructura de directorios (recomendada): ● svn mkdir file:///home/oreitmaier/repository/{trunk,branches,tags}
  • 45. Historia de Subversión Subversion (SVN) Mecanismo Copy->Modify->Merge 6 Branches 9 11 15 16 Merges 2 1 Trunk 3 7 4 8 Discontinued development branch 10 5 Tags 12 14 13 Merge: - Normal (Unidireccional) - Reintegration (Bidireccional)
  • 46. Flujos de Trabajo (Branching) Subversion (SVN) Branch/Tag (svn copy) Working Copy app/ 1 2 Working Copy mybranch/ Checkout Branch (svn [co|up]) Repository Merge Trunk (svn merge) 3 app/trunk app/branches/mybranch app/tags/mytag Checkout Trunk (svn [co|up]) 4 Working Copy mynewtrunk/ Reintegrate Branch (svn merge) 5 2.1 / 4.1 Update (svn update) 3.1 / 5.1 Commit (svn commit)
  • 47. Flujo de Trabajo (Branching) Subversion (SVN) ● ● En una copia local ^/ es igual a la raíz de la URL del repositorio file:///home/oreitmaier/repository svn copy ^/trunk ^/branches/mybranch -m “MyBranch” /home/oreitmaier/ repository/trunk repository/branches/mybranch Copy
  • 48. Flujo de Trabajo (Branching) Subversion (SVN) ● svn co file:///home/oreitmaier/repository todo -m “todo” ¡Cuidado con hacer Checkout/Commit de la ROOT!
  • 49. Flujo de Trabajo (Branching) Subversion (SVN) ● svn co ^/braches/mybranch mybranch /home/oreitmaier/ repository/branches/mybranch mybranch/ Checkout
  • 50. Flujo de Trabajo (Branching) Subversion (SVN) ● svn co file:///home/oreitmaier/repository todo -m “todo” ¡Cuidado con hacer Checkout/Commit de la ROOT!
  • 51. Flujo de Trabajo (Branching) Subversion (SVN) 2 Proyectos 2 Trunks (ROOTs) 1 Branch
  • 52. Flujo de Trabajo (Branching) Subversion (SVN) REVISION “r” ES UN NÚMERO ÚNICO
  • 53. Flujo de Trabajo (Branching) Subversion (SVN) User Copia de Trabajo calc/ BRANCH
  • 54. Flujo de Trabajo (Branching) Subversion (SVN) Sally Copia de Trabajo calc/ TRUNK
  • 55. Flujo de Trabajo (Reintegrate) Subversion (SVN) Regularmente sincronizarse con el TRUNK, es decir, fusionar el TRUNK con (→) MYBRANCH: ● cd /home/oreitmaier/mybranch ● svn update ● svn merge ^/trunk ● svn diff (Corregir Sintácticos / Semánticos / Probar) ● svn revert . -R (¿Revertir el merge?) ● svn commit -m "Fusione el trunk con (→) mybranch"
  • 56. Flujo de Trabajo (Reintegrate) Subversion (SVN) ● Si en una fusión del TRUNK con (→) MYBRANCH aparece el error: – svn merge ^/trunk ● ● svn: E195020: Cannot merge into mixed-revision working copy [357:378]; try up Debe hacerse una actualización e intentar de nuevo: – svn update – svn merge ^/trunk – svn commit -m "Fusión final del trunk con (->) mybranch"
  • 57. Flujo de Trabajo (Reintegrate) Subversion (SVN) Para fusionar MYBRANCH con (→) el TRUNK (no se podrá modificar más mybranch): – – cd mytrunk – svn update – svn merge --reintegrate ^/branches/mybranch – svn diff (Corregir Sintácticos / Semánticos / Probar) – ● svn co file:///home/oreitmaier/repository/trunk mytrunk svn revert . -R (¿Revertir el merge?) Corregir sintácticos, semánticos y probar para luego: – – ● svn commit -m "Fusión de mybranch al (→) trunk" svn mergeinfo ^/branches/mybranch ^/trunk Final y opcionalmente (No se pierden datos): – svn delete ^/repository/branches/mybranch -m "mybranch reintegrada al trunk"
  • 58. Flujo de Trabajo (Keep Alive Branch) Subversion (SVN) Mantener Activa Una Rama Reintegrada r2 r6 B MyBranch r3 C F Spurious (False) Conflicts On Merge OK Trunk A D E G r1 r4 r5 r7 Bloquear Cambios “D” por “CherryPicking”
  • 59. Flujo de Trabajo (Alive Branch) Subversion (SVN) Si se desea continuar usando la rama es necesario hacer un trabajo adicional (D=r4, versión del merge de la rama): ● svn co file:///home/oreitmaier/repository/branches/mybranch mybranch ● cd mybranch ● svn update ● svn merge --record-only -c 4 ^/trunk svn commit -m "Blocking r4 into my branch"
  • 60. Flujo de Trabajo (Branching) Subversion (SVN) ● ● ● Se puede pensar que una rama es diferente y es tratada como algo diferente pero no es así, es un directorio que tiene información histórica adicional. Subversion no tiene un concepto interno de rama, sólo sabe como hacer copias de directorios, el significado se lo da el usuario. Debido a lo anterior, no es necesario que las ramas estén en el directorio branches/ ó tags/. Se puede establecer cualquier estructura, a diferencia de otros gestores de versiones en donde las ramas tiene propiedades adicionales.
  • 61. Flujo de Trabajo (Ignore) Subversion (SVN) ● echo “archivo.txt” > ignoring.txt ● echo “tmp” >> ignoring.txt ● svn propset svn:ignore -F ignoring.txt . ● rm ingoring.txt ● svn commit -m "Rutas a ignorar"
  • 62. Flujo de Trabajo (Export) Subversion (SVN) ● svn export: “clonar la copia local y eliminar la metadadata (directorios ocultos .svn), es decir, preparar versión para colocar en producción.
  • 63. Subversion (Changelist & Switch) ● ● svn changelist: agrupar archivos y permitir hacer commit solo de dichos archivos con svn commit - changelist, no todos los clientes lo soportan. svn switch: cambiar el URL del repositorio para trabajar en un mirror.
  • 64. Flujo de Trabajo (Locking) Subversion (SVN) Existen tres (3) tipos de bloqueos (locks): – Bloqueo manuales: con el comando svn lock y svn unlock que aparecen con la letra K cuando se ejecuta svn status. – Bloqueos internos en la copia de trabajo: utilizados por subversion para prevenir que varios clientes entren en conflicto mientras acceden a la misma Working Copy, y aparece con la letra L en la tercera columna de un svn status, se eliminan con el comando svn cleanup. – Bloqueos internos de bases de datos: utilizados por el motor de base de datos BDB para prevenir conflictos entre múltiples programas tratando de acceder a la base de datos. Este tipo de errores se produce cuando hay persistencia de datos después de un error provocan que el repositorio se bloquee.
  • 65. Flujo de Trabajo (Locking) Subversion (SVN) ● ● Subversion existe para evitar tener que hacer LOCK aunque a veces sea necesario hacer un svn lock, modificar y liberar con svn unlock. Bloquear simplemente impide que el archivo sea versionado (commited) durante un período de tiempo por un usuario diferente a quien bloqueó el archivo.
  • 67. Subversion + Eclipse Subversion (SVN) ● ● ● ● ● Plugin: Subversive Eclipse Menu → Window → Preferences → General → Network Connections →+Proxy Entries, Active Provider: Manual → Apply → OK. Eclipse Menu → About → Install new software → Work With → All Available Sites → Search: svn Select and Install: Subversive SVN Team Provider (Incubation) Restart
  • 69. Eclipse Subversive Plugin Subversion (SVN) ● Eclipse Projects -> “Prueba” → Team → Share Project → SVN (First Time!) → SVN Kit 1.3.5.
  • 70. Eclipse Subversive Plugin Subversion (SVN) Project (Right Clic) > Team > Share Project... /trunk svn import ¿svnadmin create?
  • 71. Eclipse Subversive Plugin Subversion (SVN) File > New Project > SVN > Project from SVN svn co
  • 72. Eclipse Subversive Plugin Subversion (SVN) File > New Project > SVN > Project from SVN svn co
  • 73. Eclipse Subversive Plugin Subversion (SVN) File > New Project > SVN > Project from SVN svn co
  • 74. Eclipse Subversive Plugin Subversion (SVN) Team > Add to Version Control svn add Tracking
  • 75. Eclipse Subversive Plugin Subversion (SVN) Team > Commit... svn commit -m “Mensaje”
  • 76. Eclipse Subversive Plugin Subversion (SVN) Team > Update to Revision … svn update -r
  • 77. Subversion + Eclipse Team > Revert... Revert = Descartar Cambios Locales!!! = No Backup!!! svn revert
  • 78. Subversion + Eclipse Team > Show History *=BASE svn log
  • 79. Eclipse Subversive Plugin Subversion (SVN) Team > Branch / Tag svn copy Después de crear la rama hay que hacer un svn co de la misma como un Nuevo Proyecto SVN para poder trabajar con ella porque no funciona siempre el proceso automático
  • 80. Eclipse Subversive Plugin Subversion (SVN) Team > Merge svn merge
  • 81. Eclipse Subversive Plugin Subversion (SVN) Team > Merge (Reintegrate) svn merge –reintegrate svn merge
  • 82. Eclipse Subversive Plugin Subversion (SVN) BRANCH Team > Show History svn merge ^/trunk TRUNK svn merge –reintegrate ^/branches/maria
  • 83. Eclipse Subversive Plugin Subversion (SVN) Window > Preferences > Team > SVN svn merge
  • 84. Eclipse Subversive Plugin Subversion (SVN) Team > Disconnect
  • 85. Eclipse Subversive Plugin Subversion (SVN) Team > Export (Pase a Producción) Duplicar Copia Local y Eliminar .svn/
  • 88. Bazaar Subversion (SVN) ● Promovido por Canonical.com (La gente detrás de Ubuntu/Linux). ● Escrito en C. ● ● Adaptabilidad y soporte directo para más flujos de trabajos que permite una fácil colaboración, mejor fusión integrada con repositorio distribuidos. Fácil de administrar y configurar, operación fuera de línea. ● Mejor soporte para cambio de nombres. ● Soportó desde sus inicios Windows. ● ● ● Integración con Launchpad.net un entorno colaborativo (teams, mailing list, release managment, code hosting and reviews, web based translations, FAQ, bug tracking, Web Service API). Economía de operaciones mejor que mercurial pero peor que Git SVN tiene soporte para copiar mientras que Bazaar sólo permite mover archivos.
  • 89. Mercurial Subversion (SVN) ● Independiente de la plataforma (Python) ● Más fácil que aprender que Git, pero más difícil que Subversion. ● Subversion permite hacer tracking de metadatos de archivos. ● Mejor documentación. ● Modelo distribuido, ● No permite fusionar dos parents. ● Basado en extensiones en vez de scripts ● Subversion permite bloqueo de archivos, Mercurial no. ● Menos funcionalidades y menos tiempo en el mercado.
  • 90. Git Subversion (SVN) ● Usado para mantener el Kernel de Linux. ● Escrito en C. ● Grande para los que odian CVS/SVN. ● Incremento dramático en la velocidad de operación. ● Economía en operaciones de branching. ● Disponibilidad de todo el árbol de historial fuera de línea. ● Modelo distribuido P2P ● Hay una curva de aprendizaje para aquellos acostumbrados a SVN ● No es óptimo para desarrolladores solitarios ● Soporte limitado para Windows comparado con Linux