wiki:InstSvnInca

PREMIERS PAS SUR SVN AVEC INCA

Clef ssh

Voir le ticket n°1 http://forge.ipsl.jussieu.fr/inca/ticket/1

Portage du modèle sur svn - Création du dépôt initial

créer les répertoires branches tags et trunk

ssh -X inca@forge.ipsl.jussieu.fr (+ passwd)
svn mkdir file:///ipsl/forge/projets/inca/svn/trunk file:///ipsl/forge/projets/inca/svn/branches file:///ipsl/forge/projets/inca/svn/tags -m "INCA : trunk branches and tags directories creation"

Importer une nouvelle architecture

Mise en place sous svn de la configuration LMDZINCA parallèle. Commande à passer pour ajouter une configuration : !!! attention se placer au dessus du répertoire que l'on veut ajouter

svn import LMDZINCA_v2 svn+ssh://yourlogin@forge.ipsl.jussieu.fr/ipsl/forge/projets/igcmg/svn/CONFIG/trunk/LMDZINCA_v2



Gestion du code via SVN

Commandes pour connaître le code que l'on utilise

Connaître les informations SVN de la version que l'on utilise

svn info [directory]

donne le numéro de revision de la version ainsi que l'URL du dépôt SVN

Savoir si il y a eu des modifications sur votre version

svn status [file]

permet de savoir si votre fichier a été modifier par rapport à l'archive svn

Ex de retour de commande :

[p24cozic@irene170 LMDZ]$ svn status
M       DefLists/context_lmdz.xml
?       DefLists/file_def_phystoke_lmdz.xml
!       libf/dyn3dmem/fluxstokenc_p.F

Dans ce cas

  • M = fichier modifié
  • ? = fichier ajouté
  • '' = fichier effacé
svn diff [file]

Donne les différences entre la version dans votre répertoire et le fichier tel qu'il était lors de son extraction.

Connaître des informations sur un fichier

svn log [file]

Donne toutes les infos sur les commits qui ont été fait sur ce fichier



Commandes pour manager le code

extraire le code en tant qu'administrateur

svn co svn+ssh://mylogin@forge.ipsl.jussieu.fr/ipsl/forge/projets/inca/svn/path

exemple : 
svn co svn+ssh://mylogin@forge.ipsl.jussieu.fr/ipsl/forge/projets/inca/svn/users/Didier/INCA_H2_COS_CH4_N2O

Note : à chaque commit est associé un numéro de révision. Si on ne le précise pas (comme exemple ci-dessus) le code extrait correspond au dernier commit fait sur le répertoire. Sinon il est possible de préciser un numéro de révision

svn co -r num svn+ssh://mylogin@forge.ipsl.jussieu.fr/ipsl/forge/projets/inca/svn/path

exemple pour extraire le numéro de rev 926 de la trunk INCA6 

svn co -r 926  svn+ssh://mylogin@forge.ipsl.jussieu.fr/ipsl/forge/projets/inca/svn/trunk/INCA6 

Faire un commit

Au préalable il faut définir l'éditeur de texte lié à SVN en ajoutant la ligne suivante dans le fichier .bashrc

export SVN_EDITOR="vi"

Avant de faire un commit il faut s'assurer que l'on travaille bien avec une version extraite en mode administrateur et que l'URL est bien celui de la version dans laquelle on veut faire le commit

svn info 

renvoie

Path: .
Working Copy Root Path: 
URL: svn+ssh://acosce@forge.ipsl.jussieu.fr/ipsl/forge/projets/inca/svn/users/NicolasF/INCA6.2
Repository Root: svn+ssh://acosce@forge.ipsl.jussieu.fr/ipsl/forge/projets/inca/svn
Repository UUID: dc8988e9-b232-0410-ba9d-85c4b96cce30
Revision: 1074
Node Kind: directory
Schedule: normal
Last Changed Author: acosce
Last Changed Rev: 1074
Last Changed Date: 2023-02-06 16:33:46 +0100 (Mon, 06 Feb 2023)

C'est l'URL qui est importante, et le numéro "revision". Dans cet exemple je travaille en mode admin sur la version users/NicolasF/INCA6.2, rev 1074

Autre exemple de svn info

Path: .
Working Copy Root Path: 
URL: https://forge.ipsl.jussieu.fr/inca/svn/tags/INCA6.2
Repository Root: https://forge.ipsl.jussieu.fr/inca/svn
Repository UUID: dc8988e9-b232-0410-ba9d-85c4b96cce30
Revision: 980
Node Kind: directory
Schedule: normal
Last Changed Author: acosce
Last Changed Rev: 980
Last Changed Date: 2021-05-04 12:15:24 +0200 (Tue, 04 May 2021)

Cette fois ci nous ne sommes pas en mode admin, et nous sommes sur la version tags/INCA6.2 rev 980

Une fois cette vérification faite, on utilise la commande svn commit pour faire un commit. Il y a alors deux possibilités, soit on écrit le message de commit dans la commande :

svn commit -m "message" namefile

Soit on ne précise pas l'option -m et l'éditeur vi (si l'on a bien défini la variable SVN_EDITOR) s'ouvrira pour permettre d'écrire un message

svn commit namefile



effacer un fichier du dépôt

svn delete namefile
svn commit -m "deleted file" namefile



Ajouter un répertoire ou un fichier

svn add newfile
svn commit -m "message" newfile



Faire un update sur un fichier ou un répertoire

svn update [file or repertory]

Exemple

$ svn update toto
U toto 

La commande svn update retourne une lettre (U, A, D, R, G ou C) plus le nom du fichier touché. Nous allons voir la signification de ces différentes lettres.

U : le fichier a bien été mis à jour, il n'y a aucun conflit. 
A : le fichier a été ajouté à votre répertoire, c'est donc qu'il n'existait pas avant. 
D : le fichier a été effacé de votre répertoire. 
R : le fichier a été remplacé dans votre répertoire. 
G : vous aviez fait des modifications dans le fichier d'origine mais ces modifications n'entre pas en conflit avec la mise à jour. 
C : il y a des conflits entre la mise à jour et vos propres modifications. Il faut donc ouvrir le fichier pour les régler manuellement. 



Ajouter un Id en entete des fichers - A faire sur tout nouveau fichier du dépôt

Rajouter en haut de chaque ficher la ligne suivante

! $Id$
ou (suivant la syntaxe)
# $Id$

Puis passer les lignes de commande suivantes :

svn propset svn:keywords "Id" *.f90
svn commit *.f90



Effacer un tag ou une branche

Exemple avec le tag v2_1 de INCA dans le projet inca
svn rm svn+ssh://yourlogin@forge.ipsl.jussieu.fr/ipsl/forge/projets/inca/svn/tags/v2_1



Copier une révision dans un nouveau répertoire du dépôt

Exemple pour créer le tag v2_1 à partir du tronc de INCA : 
svn cp \
 svn+ssh://yourlogin@forge.ipsl.jussieu.fr/ipsl/forge/projets/inca/svn/trunk \
 svn+ssh://yourlogin@forge.ipsl.jussieu.fr/ipsl/forge/projets/inca/svn/tags/v2_1
Exemple pour copier chez Didier une version de travail : 

svn cp -r 928 svn+ssh://yourlogin@forge.ipsl.jussieu.fr/ipsl/forge/projets/inca/svn/tags/INCA6_CMIP svn+ssh://yourlogin@forge.ipsl.jussieu.fr/ipsl/forge/projets/inca/svn/users/Didier/INCA_H2_COS_CH4_N2O



Switcher d'un mode utilisateur à un mode administrateur

svn switch --relocate https://forge.ipsl.jussieu.fr/inca/svn svn+ssh://login@forge.ipsl.jussieu.fr/ipsl/forge/projets/inca/svn

Comment faire un merge (peu recommander - rien ne vaut le manuel)

Par exemple entre le trunk (INCA_trunk) et une branche (INCA_branche) créée depuis une copie du trunk.

  • extraire la version de la branche
  • connaitre le numéro de révision du commit que l'on veut merger (ex XXX)
    cd  INCA_branche
    svn merge -c XXX svn+ssh://acosce@forge.ipsl.jussieu.fr/ipsl/forge/projets/inca/svn/trunk/INCA_trunk
    

Si l'on souhaite merger un ensemble de commit (de rev XXX à rev YYY)

cd  INCA_branche
svn merge -rXXX:YYY svn+ssh://acosce@forge.ipsl.jussieu.fr/ipsl/forge/projets/inca/svn/trunk/INCA_trunk

Si conflit lors d'un merge et qu'il n'y a rien à corriger on peut le résoudre avec

svn resolved [path fichier]
Last modified 14 months ago Last modified on 02/06/23 16:46:51