Subversion
De SergiTurWiki
| 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 |
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:
- http://svnbook.red-bean.com/en/1.0/ch07s03.html
- http://www.jefferyfernandez.id.au/2007/03/26/svnexternals-linking-external-libraries/
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
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:
Instal·lació i configuració
Recursos:
- https://help.ubuntu.com/community/Subversion?action=show&redirect=SVN
- http://queens.db.toronto.edu/~nilesh/linux/subversion-howto/
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


