Subversion

De SergiTurWiki

Share/Save/Bookmark
Dreceres ràpides: navegació, cerca
Aquesta wiki forma part dels materials d'un curs
Curs: LinuxProgramacio
Fitxers: ControlDeVersions.pdf
Repositori SVN: http://svn.projectes.lafarga.cat/svn/iceupc/LinuxProgramacio
Usuari: anonymous
Paraula de pas: sense paraula de pas
Autors: Sergi Tur Badenas
Logo de subversión

Contingut

Client

Comandes

Podeu consultar les comandes que us proporciona svn i una petita ajuda amb

$ svn help
usage: svn <subcommand> [options] [args]
Subversion command-line client, version 1.4.4.
Type 'svn help <subcommand>' for help on a specific subcommand.
Type 'svn --version' to see the program version and RA modules
  or 'svn --version --quiet' to see just the version number. 

Most subcommands take file and/or directory arguments, recursing
on the directories.  If no arguments are supplied to such a
command, it recurses on the current directory (inclusive) by default.

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

Subversion is a tool for version control.
For additional information, see http://subversion.tigris.org/

Per consultar l'ajuda d'una subcomanda concreta podeu executar:

$ svn help add
add: Put files and directories under version control, scheduling
them for addition to repository.  They will be added in next commit.
usage: add PATH... 

Valid options:
 --targets arg            : pass contents of file ARG as additional args
 -N [--non-recursive]     : operate on single directory only
  -q [--quiet]             : print as little as possible
  --config-dir arg         : read user configuration files from directory ARG
  --force                  : force operation to run
  --no-ignore              : disregard default and svn:ignore property ignores
  --auto-props             : enable automatic properties
  --no-auto-props          : disable automatic properties

Commit (ci)

Envia els canvis de la còpia de treball local al repositori.

Exemple

$ svn ci

Podeu consultar l'ajuda amb:

$ svn help ci
commit (ci): Send changes from your working copy to the repository.
usage: commit [PATH...]

  A log message must be provided, but it can be empty.  If it is not
  given by a --message or --file option, an editor will be started.
  If any targets are (or contain) locked items, those will be
  unlocked after a successful commit.

Valid options:
  -q [--quiet]             : print as little as possible
  -N [--non-recursive]     : operate on single directory only
  --targets arg            : pass contents of file ARG as additional args
  --no-unlock              : don't unlock the targets
  -m [--message] arg       : specify log message ARG
  -F [--file] arg          : read log message from file ARG
  --force-log              : force validity of log message source
  --editor-cmd arg         : use ARG as external editor
  --encoding arg           : treat value as being in charset encoding ARG
  --username arg           : specify a username ARG
  --password arg           : specify a password ARG
  --no-auth-cache          : do not cache authentication tokens
  --non-interactive        : do no interactive prompting
  --config-dir arg         : read user configuration files from directory ARG

import

Aquesta comanda permet pujar al servidor SVN nou codi:

$ svn import -m "Missatge inicial" ~/cursplinux/test file:///var/lib/svn/cursplinux

On ~/cursplinux/test és la carpeta local on tenim el codi que volem pujar i file:///var/lib/svn/cursplinux és un servidor SVN que tenim en local.

Podem utilitzar qualsevol dels altres esquemes de connexió de subversion per pujar els fitxers amb un servidor SVN remot.

Per exemple:

$ svn import -m "Primer import dels fitxers" SVN_Cursos_ICE_UPC https://svn.projectes.lafarga.cat/svn/iceupc


export

TODO

checkout

Obté una còpia de treball local d'un repositori:

Us col·loqueu a la carpeta local on voleu "descarregar" el repositori

$ cd
$ mkdir svn
$ cd svn

I executeu el checkout

$ svn co files://localhost/var/lib/svn/cursplinux cursplinux

On:

files://localhost/var/lib/svn/cursplinux

és la URL del repositori (pot ser local com aquest cas o també remota).

i

cursplinux

el nom de la carpeta que volem que es crei al directori de treball amb els continguts del checkout.

Podem no utilitzar l'últim paràmetre i aleshores el nom de la carpeta en local serà el mateix que el nom de la carpeta en remot.

update

La comanda update actualitza la còpia de treball, descarregant les novetats que hi hagi al repositori.

Exemple:

Obtenir la última revisió del repositori (HEAD):

$ svn update

Durant l'actualització, de cada fitxer ens mostrarà una de les següents opcions:

A  Added
D  Deleted
U  Updated
C  Conflict
G  Merged

Podeu consultar l'ajuda amb:

$ svn help update
update (up): Bring changes from the repository into the working copy.
usage: update [PATH...]

 If no revision given, bring working copy up-to-date with HEAD rev.
 Else synchronize working copy to revision given by -r.

 For each updated item a line will start with a character reporting the
 action taken.  These characters have the following meaning:

   A  Added
   D  Deleted
   U  Updated
   C  Conflict
   G  Merged

 A character in the first column signifies an update to the actual file,
 while updates to the file's properties are shown in the second column.
 A 'B' in the third column signifies that the lock for the file has
 been broken or stolen.

Valid options:
 -r [--revision] arg      : ARG (some commands also take ARG1:ARG2 range)
                            A revision argument can be one of:
                               NUMBER       revision number
                               '{' DATE '}' revision at start of the date
                               'HEAD'       latest in repository
                               'BASE'       base rev of item's working copy
                               'COMMITTED'  last commit at or before BASE
                               'PREV'       revision just before COMMITTED
 -N [--non-recursive]     : operate on single directory only
 -q [--quiet]             : print as little as possible
 --diff3-cmd arg          : use ARG as merge command
 --username arg           : specify a username ARG
 --password arg           : specify a password ARG
 --no-auth-cache          : do not cache authentication tokens
 --non-interactive        : do no interactive prompting
 --config-dir arg         : read user configuration files from directory ARG
 --ignore-externals       : ignore externals definitions

add

Afegeix un fitxer o directori al control de versions i planifica la pujada del fitxer al repositori. El fitxer serà afegit al pròxim commit.

Per exemple:

$ svn add *
svn: warning: 'TallerClausWEP' is already under version control
svn: warning: 'TaulaRodonaLinkat' is already under version control
A         XerradaOpenStreetMaps
A  (bin)  XerradaOpenStreetMaps/presentacio-ubuntujj-osm.odp

Podeu consultar l'ajuda d'aquesta comanda amb:

$ svn help add
add: Put files and directories under version control, scheduling
them for addition to repository.  They will be added in next commit.
usage: add PATH...

Valid options:
  --targets ARG            : pass contents of file ARG as additional args
  -N [--non-recursive]     : obsolete; try --depth=files or --depth=immediates
  --depth ARG              : limit operation by depth ARG ('empty', 'files',
                            'immediates', or 'infinity')
  -q [--quiet]             : print nothing, or only summary information
  --force                  : force operation to run
  --no-ignore              : disregard default and svn:ignore property ignores
  --auto-props             : enable automatic properties
  --no-auto-props          : disable automatic properties
   --parents                : add intermediate parents 

Global options:
  --username ARG           : specify a username ARG
  --password ARG           : specify a password ARG
  --no-auth-cache          : do not cache authentication tokens
  --non-interactive        : do no interactive prompting
  --config-dir ARG         : read user configuration files from directory ARG

delete (remove,rm)

Esborra fitxers de la còpia local o del repositori.

Sinònims:

del
remove
rm

Exemple

Esborrar un fitxer o carpeta de la còpia de treball:

$ svn rm MOodle

Per esborrar del repositori cal utilitzar la URL completa:

$ svn delete https://svn.projectes.lafarga.cat/svn/iceupc/MOodle

Podeu consultar l'ajuda amb

$ svn help rm
delete (del, remove, rm): Remove files and directories from version control.
usage: 1. delete PATH...
       2. delete URL...

 1. Each item specified by a PATH is scheduled for deletion upon
   the next commit.  Files, and directories that have not been
   committed, are immediately removed from the working copy.
   PATHs that are, or contain, unversioned or modified items will
   not be removed unless the --force option is given.

 2. Each item specified by a URL is deleted from the repository
   via an immediate commit.

Valid options:
 --force                  : force operation to run
 -q [--quiet]             : print as little as possible
 --targets arg            : pass contents of file ARG as additional args
 -m [--message] arg       : specify log message ARG
 -F [--file] arg          : read log message from file ARG
 --force-log              : force validity of log message source
 --editor-cmd arg         : use ARG as external editor
 --encoding arg           : treat value as being in charset encoding ARG
 --username arg           : specify a username ARG
 --password arg           : specify a password ARG
 --no-auth-cache          : do not cache authentication tokens
 --non-interactive        : do no interactive prompting
 --config-dir arg         : read user configuration files from directory ARG

copy

Molt utilitzada per gestionar tags (etiquetes) i branques (branches). Normalment els repositoris SVN s'organitzen en 3 carpetes:

  • trunk: Conté el cos principal del programa
  • tags: Conté versions especifiques del programa. Cada versió té una etiqueta (tag)
  • branches: Conté branques del projecte.

Per fer un nou tag de la branca principal només cal:

$ svn copy trunk/ tags/TAG_NAME

move

Permet moure o canviar el nom d'un fitxer o carpeta tant a la còpia de treball com al repositori.

Exemples

Moure un fitxer o carpeta de la còpia de treball:

$ svn move MOodle Moodle

Moure un fitxer o carpeta d'un repositori:

$ svn move https://svn.projectes.lafarga.cat/svn/iceupc/MOodle https://svn.projectes.lafarga.cat/svn/iceupc/Moodle

NOTA: Es necessiten permisos en el repositori per poder fer aquesta operació.

És equivalent a fer una còpia (copy) i després esborrar (delete).

Podeu consultar l'ajuda amb:

$ svn help move
move (mv, rename, ren): Move and/or rename something in working copy or repository.
usage: move SRC DST

 Note:  this subcommand is equivalent to a 'copy' and 'delete'.
 Note:  the --revision option has no use and is deprecated.

 SRC and DST can both be working copy (WC) paths or URLs:
   WC  -> WC:   move and schedule for addition (with history)
   URL -> URL:  complete server-side rename.

Valid options:
 -r [--revision] arg      : ARG (some commands also take ARG1:ARG2 range)
                            A revision argument can be one of:
                               NUMBER       revision number
                               '{' DATE '}' revision at start of the date
                               'HEAD'       latest in repository
                               'BASE'       base rev of item's working copy
                               'COMMITTED'  last commit at or before BASE
                               'PREV'       revision just before COMMITTED
 -q [--quiet]             : print as little as possible
 --force                  : force operation to run
 -m [--message] arg       : specify log message ARG
 -F [--file] arg          : read log message from file ARG
 --force-log              : force validity of log message source
 --editor-cmd arg         : use ARG as external editor
 --encoding arg           : treat value as being in charset encoding ARG
 --username arg           : specify a username ARG
 --password arg           : specify a password ARG
 --no-auth-cache          : do not cache authentication tokens
 --non-interactive        : do no interactive prompting
 --config-dir arg         : read user configuration files from directory ARG

status

diff

Vegeu també la comanda diff

revert

En cas que un fitxer tingui un conflicte, el podrem resoldre amb la comanda revert. Amb la comanda revert, desfem (undo) tots els canvis locals, és a dir, resolem el conflicte a favor de la versió del repositori.

Un exemple:

$ svn revert README
Reverted 'README'
$ svn update README
At revision 6.

Podeu consultar l'ajuda amb:

$ svn help revert
revert: Restore pristine working copy file (undo most local edits).
usage: revert PATH...

  Note:  this subcommand does not require network access, and resolves
  any conflicted states.  However, it does not restore removed directories.

Valid options:
  --targets ARG            : pass contents of file ARG as additional args
  -R [--recursive]         : descend recursively, same as --depth=infinity
  --depth ARG              : limit operation by depth ARG ('empty', 'files',
                            'immediates', or 'infinity')
  -q [--quiet]             : print nothing, or only summary information
  --changelist ARG         : operate only on members of changelist ARG
                             [aliases: --cl]

Global options:
  --username ARG           : specify a username ARG
  --password ARG           : specify a password ARG 
  --no-auth-cache          : do not cache authentication tokens
  --non-interactive        : do no interactive prompting
  --config-dir ARG         : read user configuration files from directory ARG
 

merge

resolve

Consulteu la secció Resolució de conflictes, per tal d'obtenir una visió més detallada del que són els conflictes.

Si intentem pujar un fitxer al repositori amb commit o intentem obtenir la última versió d'un fitxer del repositori amb update, podem trobar un conflicte.

La pròpia comanda commit o update, ens proporcionaran la possibilitat de resoldre el conflicte, donant-los la opció de comparar els fitxers amb diff.

Si posposem la resolució del conflicte, aleshores l'haurem de resoldre posteriorment amb la comanda resolve

NOTA: El conflicte també es pot resoldre a mà editant el fitxer i posteriorment utilitzant la 
comanda resolved per desmarcar el fitxer com a conflictiu (fins que no es desmarqui el fitxer no el 
podrem pujar al repositori).

A l'hora de resoldre un conflicte hi ha 4 opcions:

  • base: S'escull com a solució el que havia abans dels nostres canvis (tant els locals com el que hi ha actualment al repositori). És a dir s'escull la versió anterior al conflicte
  • working: Si em resol els problemes a mà editant el fitxer aleshores escollim aquesta opció.
  • mine-full: S'escull la nostra versió com a solució al conflicte
  • theirs-full: S'escull la versió del repositori com a solució al conflicte.

Si feu un ls de la copia local, quan hi ha un conflicte, veureu:

$ ls  Install*
InstallDRBL.sh  
InstallDRBL.sh.mine  
InstallDRBL.sh.r38  
InstallDRBL.sh.r39

On:

  • InstallDRBL.sh: És el fitxer amb conflicte i se'l distingeix per que al seu interior hi ha línies per resoldre (marcades amb <<<<<<)
  • InstallDRBL.sh.mine: És la nostra versió
  • InstallDRBL.sh.r38: És la versió base. El que havia abans de les nostres modificacions
  • InstallDRBL.sh.mine: És la versió que hi ha ara al servidor

Podeu consultar l'ajuda d'aquesta comanda amb:

$ svn help resolve
resolve: Resolve conflicts on working copy files or directories.
usage: resolve [PATH...]

  Note:  the --accept option is currently required.

Valid options:
  --targets ARG            : pass contents of file ARG as additional args
  -R [--recursive]         : descend recursively, same as --depth=infinity
  --depth ARG              : limit operation by depth ARG ('empty', 'files',
                            'immediates', or 'infinity')
  -q [--quiet]             : print nothing, or only summary information
  --accept ARG             : specify automatic conflict resolution source
                            ('base', 'working', 'mine-full', 'theirs-full')

Global options:
  --username ARG           : specify a username ARG
  --password ARG           : specify a password ARG
  --no-auth-cache          : do not cache authentication tokens
  --non-interactive        : do no interactive prompting
  --config-dir ARG         : read user configuration files from directory ARG

Recursos:

resolved

Editem el fitxer amb el nostre editor preferit i deixem només una línia (hem d'escollir si la bona és la nostra o la del repositori).

Un cop fet això podrem pujar el fitxer amb:

$ svn resolved nomfitxer
$ svn ci nomfitxer

propset

Excloure un directori

$ svn propset svn:ignore '*' directori/

Resolució de conflictes

Al pujar (commit) o baixar (update) una nova versió d'un fitxer del repositori, hi ha la possibilitat que hi hagi un conflicte. Un conflicte succeïx quan la versió local i la versió del repositori tenen diferències en una mateixa línia.

NOTA: Si dos usuaris modifiquen al mateix temps un fitxer però en línies diferents, aleshores no hi ha conflicte. 
Subversion fa automàticament un merge (uneix les dues versions en una).

Els fitxers amb conflicte es marquen amb el caràcter C:

$ svn update
C   README

Els conflictes es marquen de la següent manera, utilitzant el format de l'eina diff:

<<<<<<< .mine
sudo cp -v drbl.conf /etc/drbl/drbl.conf
=======
sudo wget -O /etc/drbl/drbl.conf --http-user=anonymous --http-password= http://svn.projectes.lafarga.cat/svn/iescopernic/SistemaRecuperacioImatgesXarxa/drbl.conf 
>>>>>>> .r39

Aquest exemple indica el següent. Els caràcters <<<<<<< indiquen l'inici del conflicte. La línia:

sudo cp -v drbl.conf /etc/drbl/drbl.conf

És el que tenim en la còpia local (ho sabem per l'indicador .mine). La línia:

sudo wget -O /etc/drbl/drbl.conf --http-user=anonymous --http-password= http://svn.projectes.lafarga.cat/svn/iescopernic/SistemaRecuperacioImatgesXarxa/drbl.conf 

És la versió HEAD (última versió) del repositori (en aquest cas la versió 39 .r39).

Cal resoldre el conflicte escollint una de les dos línies.

Els fitxers que tenen conflictes, queden marcats i subversión ens impedeix pujar-los al repositori fins que no resolem el conflicte. Tenim tres opcions a l'hora de resoldre el conflicte:

  • Resoldre a favor de la versió del repositori amb la comanda revert

Consulteu la comanda revert

  • Utilitzar la comanda svn resolve

Consulteu la comanda resolve

  • Resoldre el conflicte editant el fitxer i utilitzant la comanda resolved

Consulteu la comanda resolved

External definitions

Permet definir dependències, és a dir, es pot determinar que al obtenir una còpia d'un repositori (amb per exemple checkup o update) automàticament es descarregui un altre repositori.

Es pot utilitzar per exemple per a no haver de repetir fitxers en diferents repositoris o entre carpetes diferents del mateix sistema.

Per exemple, dos carpetes del mateix repositori:

http://svn.projectes.lafarga.cat/svn/iceupc/DissenyXarxaLocalLinux/moodle/sessio4/

i

http://svn.projectes.lafarga.cat/svn/iceupc/LinuxAdministracioAvan%C3%A7ada/moodle/sessio5

Resulta que volem que les dos comparteixin una mateixa carpeta, la carpeta transparències. Podem tenir els fitxers només a una de les carpetes i fer una external definition a l'altre carpeta. En el nostre cas la que conté realment els fitxers és:

http://svn.projectes.lafarga.cat/svn/iceupc/LinuxAdministracioAvan%C3%A7ada/moodle/sessio5

A l'altre, en una còpia local hem fet:

Primer crear un fitxer:

$ joe externals

Amb el següent contingut:

transparencies http://svn.projectes.lafarga.cat/svn/iceupc/LinuxAdministracioAvan%c3%a7ada/moodle/sessio5/transparencies

I hem guardat amb (Ctrl+x). Ara cal definir la propietat :

$ svn propset svn:externals -F externals .
property 'svn:externals' set on '.'
NOTA: Una alternativa és utilitzar svn propedit que obra l'editor de text per defecte i permet editar les propietats.

Ara un update tindrà el següent resultat:

$ svn update

Fetching external item into 'transparencies'
External at revision 77.

At revision 77.
NOTA: Les external definitions no apareixen a la interfície web!. 
NOTA 2: No es poden fer external definitions de fitxers. Han de ser carpetes.

IMPORTANT: Cal no oblidar fer un commit de les propietats que em modificat en local:

$ svn ci
...
--This line, and those below, will be ignored--

_M   moodle/sessio3

Sembla que la opció _M indicar que hi ha propietats modificades.


Recursos:

Servidor

Esquemes de connexió

Un dels avantatges de subversion és la seva arquitectura. Subversion és independent del mètode/protocol d'accés al repositori i per tant ens permet accedir-hi de múltiples maneres

Imatge:Ch01dia1.png

L'esquema d'accés utilitzat és basa en URL i per tant està força estandarditzat.

Subversion utilitza un sistema d'accés al repositori basat en URL i per tant està força estandarditzat i és independènt del protocol de transport. Alguns dels esquemes que suporta els podeu veure a la següent taula:

Imatge:ProtocolsSVN.jpg

Instal·lació i configuració

Recursos:

Creació del repositori

Creem la carpeta on guardarem el repositori de SVN:

$ sudo mkdir /var/lib/svn

Iniciem el repositori amb la comanda svnadmin:

$ sudo svnadmin create /var/lib/svn

Imagineu que voleu donar accés al repositori als usuaris del grup cursplinux:

Creeu el grup:

$ sudo groupadd cursplinux

Us afegiu al grup (en aquest cas l'exemple és l'usuari sergi)

$ sudo usermod -a -G cursplinux sergi

Modifiquem els permisos del repositori:

$ sudo chown -R www-data:cursplinux /var/lib/svn
$ sudo chmod -R 775 /var/lib/svn

Configuració del servidor

$ sudo joe /var/lib/svn/conf/svnserve.conf

Configuració WebDAV

Cal instal·lar el paquet:

$ sudo apt-get install libapache2-svn

Activar els mòduls d'Apache:

$ sudo a2enmod dav
$ sudo a2enmod dav_svn

Ara cal configurar el fitxer /etc/apache2/mods-available/dav_svn.conf:

$ sudo joe /etc/apache2/mods-available/dav_svn.conf
<Location /svn_cursplinux>
  DAV svn
  SVNPath /var/lib/svn  
  AuthType Basic
  AuthName "Subversion Repository"
  AuthUserFile /etc/apache2/dav_svn.passwd
  Require valid-user
  SSLRequireSSL
</Location>

Tingueu en compte que heu de posar els valors que s'escaiguin a la vostra configuració.

Ara cal afegir suport per a SSL al servidor. Podeu consultar l'article Configuració SSL.

Ara creem el fitxer de paraules de pas:

$ sudo htpasswd -c /etc/apache2/dav_svn.passwd sergi

Podeu afegir altres usuaris amb:

$ sudo htpasswd /etc/apache2/dav_svn.passwd john
$ sudo htpasswd /etc/apache2/dav_svn.passwd sten

Un cop ho tingueu tot torneu a iniciar Apache:

$ sudo /etc/init.d/apache2 force-reload

Recursos:

Configuració SSH

Al fitxer svnserve.conf:

 $ sudo joe /var/lib/svn/conf/svnserve.conf

Cal posar:

Instal·lació

subversion-tools

Fent branques i etiquetes del repositori (Branching & Tagging)

Les branques i les etiquetes es fan amb Subversion utilitzant les comandes cp i merge. El repositori s'organitza en 3 parts:

  • trunk: Conté la última versió i totes les seves anteriors revisions del "tronc principal" de desenvolupament.
  • tags: Conté les diferents "fotos" del codi font en diferents moments. Cada "foto" té la seva pròpia etiqueta. Per exemple una etiqueta pot ser versió 1.1
  • branches: Conté les branques del projecte.

Aquesta organització no és automàtica, la de fer el desenvolupador creant aquestes carpetes. Les carpetes es poden dir d'un altre forma sempre i quan es tinguin en compte aquest nous noms a l'hora d'utilitzar les comandes copy i merge.

Consulteu el manual de subversion:

http://svnbook.red-bean.com/en/1.5/svn.branchmerge.html

Eines gràfiques i IDE

Consulteu:

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

Eclipse

Hi ha un plugin per a Eclipse anomenat subclipse.

Aneu a la carpeta on esta instal·lat eclipse i descarregueu-lo:

$ cd ~/eclipse
$ wget http://subclipse.tigris.org/files/documents/906/46495/site-1.6.5.zip
IMPORTANT: Consulteu a:
http://subclipse.tigris.org/servlets/ProjectProcess?pageID=p4wYuA
Si hi ha versions més actuals de subclipse. A data (--acacha 10:34, 21 oct 2009 (UTC)) la versió que apareix a aquesta wiki era la més actual.

Si executeu:

$ thunar site-1.6.5.zip

Veureu que són fitxer de la carpeta plugins i features d'Eclipse. Només queda descomprimir:

$ unzip site-1.6.5.zip

I consulteu la web http://subclipse.tigris.org/install.html per tal de consultar com funciona el plugin.

Vegeu també l'article sobre Eclipse.

Recursos:

Nautilus

$ sudo apt-get install nautilus-script-collection-svn

Per activar-lo cal executar:

$ nautilus-script-manager enable Subversion

I tornar a iniciar nautilus

Recursos:

kdesvn

$ sudo apt-get install kdesvn
$ kdesvn

Pysvn

$ sudo apt-get install svn-workbench
$ svn-workbench

[[]]


Recursos:

Argonaut SVN

Recursos:

Websvn

Recursos:

Tortoise SVN (Per a Windows)

http://tortoisesvn.net

Resolució de problemes

XXXX is scheduled for addition, but is missing

Si intenteu fer un commit i us dona el següent error:

$ svn ci *
svn: Commit failed (details follow):
svn: '/home/sergi/tmp/iescopernic/FestaUbuntu/XerradaOpenStreetMaps/.~lock.presentacio-ubuntujj-osm.pdf#' is scheduled for  
addition, but is missing

Això vol dir que vau afegir un fitxer amb la comanda svn add i que ara aquest fitxer no existeix. Utilitzeu la comanda svn remove per solucionar aquest problema. Per exemple:

$ svn rm XerradaOpenStreetMaps/.~lock.presentacio-ubuntujj-osm.pdf

Si el fitxer ja no existeix el podeu crear amb touch:

$ touch XerradaOpenStreetMaps/.~lock.presentacio-ubuntujj-osm.pdf

i forçar la eliminació:

$ svn rm --force XerradaOpenStreetMaps/.~lock.presentacio-ubuntujj-osm.pdf

Aborting commit: 'PATH_TO_FILE' remains in conflict

Si al fer un commit us trobeu amb l'error:

$ svn ci *
svn: Commit failed (details follow):
svn: Aborting commit: '/home/sergi/tmp/iescopernic/SistemaRecuperacioImatgesXarxa/InstallDRBL.sh' remains in conflict

Si ja heu solucionat el conflicte podeu utilitzar

Recursos

IES Nicolau Copèrnic