wiki:InstSvnInca

Version 32 (modified by acosce, 19 months ago) (diff)

--

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"

Pour faire un commit 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 s'ouvrira pour permettre d'écrire un message

svn commit "message" 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

pour faire un merge

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]