SVN & gestion des dépendances

Bonjour à  tous,


 


j'ai souhaité il y a peu de temps commencer l'utilisation des branches et tags dans mon projet géré par subversion.


 


Ce projet utilise plusieurs bibliothèques tièrces liées dynamiquement au projet (drag&drop de la lib dans mon projet)


 


Lorsque je créé un tag ou un nouvelle branche, tous les chemins relatifs vers ces bibliothèques (Library search paths & user header search paths) sautent car le projet dans le trunk se situe un niveau plus haut dans le système de fichiers que dans une branche ou un tag : 


 


           |


branch
ma_branch
projet

           |


           |


repo --|


tag
mon_tag
projet

           |


           |


           |


trunk
projet

 


Existe-t-il un moyen régler/contourner ce problème à  la création de branche ou tag ?


Réponses

  • AliGatorAliGator Membre, Modérateur
    Tes librairies, elles, elles se trouvent où ?
    - Dans le repo : du coup ça devrait marcher car le chemin relatif marcherait dans les 2 cas
    - A l'extérieur du repo : ça ne vaudrait pas le coup de les mettre dans le repo, ou dans un repo à  part et de créer un external ?

    Sinon la solution : passer à  GIT ;) Qui contrairement à  SVN ne fait pas une grosse copie de bourrin de ton trunk dans tag/ ou branches/ quand tu tag ou branche, mais gère ça en interne et du coup en plus de la grosse économie d'espace disque (car il ne gère que les deltas et pas des copies complètes comme SVN, une branche ou un tag GIT ça coûte vraiment rien au point qu'on en fait tout le temps alors qu'en SVN on essaye de les limiter car c'est plus gourmand et plus galère), les chemins (relatifs ou absolus) sont de plus inchangés quel que soit le tag ou la branche active. Donc pas de problème de ce genre.
  • Mes lib se trouvent dans le même repo:


     


    *repo


     **Projet


       *** trunk


         ****xcode_proj


       *** branch


       *** tag


         ****mon_tag


          *****xcode_proj


     **Libs


      ***mes libs


       ...


     


    Il existe des outils pour migrer de svn à  git sans perdre de données (historique, ...) ?


  • AliGatorAliGator Membre, Modérateur
    Ok c'est dans le même repo, mais pas dans la même arborescence trunk/tags/branches donc, je vois.
    Du coup en effet c'est le bordel ^^

    Il existe des outils pour migrer de svn à  git sans perdre de données (historique, ...) ?

    Oui, y'a plein de tutos sur la toile. En gros le principe est d'utiliser GIT-SVN (module intégré à  GIT, déjà  dispo sur ton Mac) qui consiste à  permettre de faire un checkout de ton repo SVN, mais au format GIT, pour que localement tu vois ça comme un repo GIT même si quand tu pousses tes modifs sur le serveur en fait c'est un serveur SVN. C'est transparent.

    Même sans parler de migrer ton serveur SVN en GIT, déjà  GIT-SVN est très pratique pour ceux qui veulent utiliser GIT en local mais sont contraints de continuer à  avoir un serveur SVN (genre en attendant que l'IT propose un serveur GIT dans leur boite), tu as un repo GIT en local, même si ton "remote" est un serveur SVN et pas un serveur GIT, c'est transparent pour toi.

    Du coup, si ensuite tu veux vraiment migrer également vers un serveur GIT et te débarasser vraiment du serveur SVN (quelle bonne idée !), la procédure est expliquée dans des tutos sur le net, mais le principe c'est juste d'utiliser GIT-SVN pour récupérer le contenu de ton repo SVN en local au format GIT, puis d'ajouter ton serveur GIT comme "remote" de ce repo, et pousser ton contenu sur ce nouveau serveur/remote GIT. C'est tout. Et l'historique est donc conservé évidemment.

    Bon, en pratique, la migration peut demander un peu plus de finesse si tu as des svn:externals dans ton repo SVN, ou si tu as déjà  des tags et des branches dans ton repo il y a 2-3 commandes supplémentaires à  exécuter pour importer ces tags et ces branches (voir les tutos sur le net), mais dans l'ensemble ça reste pas méchant. Et en plus il y a des scripts sur la toile de dispo qui t'automatisent tout ça (en particulier le script "svn2git") et te simplifient encore plus la migration.
  • et du coup, utiliser git-svn permettrait de faciliter la gestion des branches et tags (plus de problème de chemin relatif) tout en restant transparent pour les autres utilisateurs svn ?


     


    it sounds like la solution à  mon problème ...


  • AliGatorAliGator Membre, Modérateur
    Oui tout à  fait.
  • Super !!


     


    J'ai commencé à  me documenter et j'ai fait le 



    git svn checkout URL

    mais je rencontre un petit souci:




    Initialized empty Git repository in [URL_REPO_LOCAL]
    RA layer request failed: REPORT request failed on '[...]': REPORT
    of '[...]': 200 OK (URL_REPO) at
    [...]\git-svn line LINE_NUMBER

    Après un peu de recherche, ma version de git svn n'a pas l'air à  jour.


    Je suis en train d'arranger ça avec Macports:



    sudo port install git-core +svn
  • AliGatorAliGator Membre, Modérateur
    octobre 2013 modifié #8
    Et c'est quoi ta version de GIT ("git --version") ?
    Tu n'utilises pas celle fournie par Xcode (via les Command Line Tools, ou via un "alias git=xcrun git" pour utiliser la version Xcode) ?

    Et sinon ça me paraà®t bizarre ta commande "git svn checkout"... en GIT, le vocabulaire est un peu différent, le "checkout" de SVN (pour récupérer le contenu du repo SVN la toute première fois) ça s'appelle "clone" en GIT (et "git checkout" a un autre sens, c'est pour basculer d'une branche à  une autre ou naviguer dans ton historique façon "Update to revision" de SVN)

    Dans tous les cas je te conseille l'excellent SourceTree (http://www.sourcetreeapp.com/) qui est gratuit et permet d'avoir une interface graphique très simple à  utiliser pour faire du GIT et du GIT-SVN, et pour te simplifier la vie.

    Par exemple quand tu rajoutes un repository dans la liste de repos dans SourceTree, il détecte tout seul si c'est un serveur GIT pur ou si c'est un serveur SVN, et si c'est du SVN il faut tout seul du GIT-SVN, avec la commande qui va bien, pour toi c'est transparent !


    PS : Je te conseille quand même dans les préférences de SourceTree de forcer l'application à  utiliser la langue Anglaise, parce que les termes techniques de GIT comme "push", "commit", "checkout", "pull" sont utilisés partout " les termes techniques sont rarement traduits dans les tutos & co " alors que quand SourceTree est en français il traduit aussi les termes techniques, et "pousser" ou autre traductions sont déjà  bien moins parlantes une fois traduites " et collent moins aux termes anglais qu'on lit dans les tutos ;)
  • mushumushu Membre
    octobre 2013 modifié #9
    • git version 1.8.4
    • svn, version 1.8.3 (r1516576)
    • git-svn version 1.8.4 (svn 1.7.3)

     


    J'utilise git dans le Terminal donc pas la version Xcode j'imagine.


     


    Quel intérêt ça apporte d'utiliser la version Xcode ?


  • AliGatorAliGator Membre, Modérateur
    octobre 2013 modifié #10
    • git version 1.8.4
    • svn, version 1.8.3 (r1516576)
    • git-svn version 1.8.4 (svn 1.7.3)
    J'utilise git dans le Terminal donc pas la version Xcode j'imagine.
     
    Quel intérêt ça apporte d'utiliser la version Xcode ?

    Ca n'apporte rien, c'est juste que Xcode étant plus souvent mis à  jour que les versions majeures de OSX, en général la version fournie avec Xcode est plus récente, c'est pour ça que je demandais.

    Si tu tapes "xcrun git --version" tu verras la version du GIT embarqué dans le bundle de Xcode. Tu auras sans doute un truc genre

    git version 1.8.3.4 (Apple Git-47)

    Tu pourras voir si elle est + à  jour (ou pas) que la version que tu utilises quand tu tapes juste "git --version" (après, c'est juste pour t'éviter d'installer une version plus récente de GIT avec MacPorts si jamais tu as déjà  une version plus récente sur ton poste genre dans le bundle Xcode, ça t'évite le passage par MacPorts pour rien... mais bon les 2 solutions se valent du moment qu'à  la fin tu as une version suffisamment récente)
  • AliGatorAliGator Membre, Modérateur
    PS : De toute façon si tu utilises SourceTree comme je te le conseille fortement plus haut, il vient avec une version embarquée de GIT (tu peux choisir dans ses préférences si tu préfères utiliser le GIT du système ou le GIT embarqué dans SourceTree)
Connectez-vous ou Inscrivez-vous pour répondre.