{{{ #!html

PREMIERS PAS SUR SVN AVEC INCA

}}} [[PageOutline]] = Clef ssh = Voir le ticket n°1 http://forge.ipsl.jussieu.fr/inca/ticket/1 [[BR]] [[BR]] = 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 }}} [[BR]] [[BR]] = 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 [[BR]] [[BR]] == 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 }}} [[BR]] [[BR]] === effacer un fichier du dépôt === {{{ svn delete namefile svn commit -m "deleted file" namefile }}} [[BR]] [[BR]] === Ajouter un répertoire ou un fichier === {{{ svn add newfile svn commit -m "message" newfile }}} [[BR]] [[BR]] === 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. }}} [[BR]] [[BR]] === 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 }}} [[BR]] [[BR]] === 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 }}} [[BR]] [[BR]] === 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 }}} [[BR]] [[BR]] === 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] }}}