Hors du temps, je vais essayer de trouver une stratégie de contrôle de version pour mon entreprise; nous utilisons actuellement SVN mais il n'y a pas de structure - nous n'avons essentiellement qu'un tronc et nous nous engageons uniquement à cela. Récemment, le responsable du développement a démarré un deuxième référentiel qui agit comme notre "tag", mais il doit être fusionné manuellement avec le "tronc" car il ne fait pas partie du même référentiel mais est totalement séparé. En effet, il n'y a qu'un seul dossier, appelé "Dev" (il y a en fait différents dossiers "Dev" à différentes dates mais juste "Dev" est le principal) et en dessous c'est tout le reste; tous les autres projets. Ce n'est pas organisé par projet du tout, il n'a aucun concept de branches / tag / tronc ou quoi que ce soit. La personne qui l'a installé initialement (disparu depuis longtemps, bien sûr) semblait ne pas savoir du tout comment configurer SVN, et depuis lors, personne n'a pris la peine d'apprendre à faire les choses correctement de peur de casser quelque chose. Nous n'utilisons aucun type de CI (ou test automatisé, malheureusement).
Premièrement, devrions-nous le séparer par projet? Par exemple, nous avons: deux sites Web ASP.NET (pas des applications Web, des sites Web), un service Web, un dossier de déploiement pour tous les scripts de table et les procédures stockées, deux clients de ligne de commande pour les projets externes qui sont appelés par le Sites Web et dossier partagé contenant des objets métier communs et similaires. Est-ce que chacun d'entre eux doit être son propre projet avec une configuration branches / tag / trunk, ou devrait-il être comme ceci:
dev/
branches/
tags/
trunk/
Site1/
Site2/
WebService/
SharedCode/
et ont toutes les branches et tout ont une copie de l'ensemble du dossier Dev? Cette approche pourrait être plus facile à avaler car nous avons souvent des situations où nous devons apporter des modifications dans la bibliothèque de code partagée et au moins un (généralement les deux) des sites Web.
Deuxièmement, nous publions régulièrement ("push" dans notre langage) sur notre serveur de développement et notre serveur en direct. D'après ce que j'ai lu, la meilleure façon de gérer cela serait que tout le développement va dans le tronc /, les branches sont "temporaires" et utilisées pour ajouter une nouvelle fonctionnalité qui pourrait affecter le tronc, et les balises sont pour les versions? Donc, nous poussons chaque mois, disons, et je travaille sur un tout nouveau module. Je branchais le tronc, et j'utilisais cette branche pour mon code, l'écrivant et le testant, etc. Une fois le module terminé, je le fusionnerais à nouveau dans le tronc (et je supprimerais peut-être la branche), et lorsque nous serions prêts à déployer, nous le marquerions («May2011», disons). Si nous avons un correctif de bogue après sa mise en ligne, il serait corrigé dans la balise May2011 et fusionné dans trunk (donc trunk obtient également le correctif), puis May2011 serait repoussé avec le correctif? Est-ce l'intention de marquer?