SVN & gestion des dépendances
mushu
Membre
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 ?
Mots clés:
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
- 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, ...) ?
Du coup en effet c'est le bordel ^^
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 ...
Super !!
J'ai commencé à me documenter et j'ai fait le
mais je rencontre un petit souci:
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:
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
J'utilise git dans le Terminal donc pas la version Xcode j'imagine.
Quel intérêt ça apporte d'utiliser la version Xcode ?
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
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)