PREMIERS PAS SUR SVN AVEC INCA
- Clef ssh
- Portage du modèle sur svn - Création du dépôt initial
-
Gestion du code via SVN
- Commandes pour connaître le code que l'on utilise
-
Commandes pour manager le code
- extraire le code en tant qu'administrateur
- Faire un commit
- effacer un fichier du dépôt
- Ajouter un répertoire ou un fichier
- Faire un update sur un fichier ou un répertoire
- Ajouter un Id en entete des fichers - A faire sur tout nouveau fichier du …
- Effacer un tag ou une branche
- Copier une révision dans un nouveau répertoire du dépôt
- Switcher d'un mode utilisateur à un mode administrateur
- Comment faire un merge (peu recommander - rien ne vaut le manuel)
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]