Stocker les bibliothèques de tiers dans le contrôle de code source
Devrait bibliothèques que l'application s'appuie sur être stockées dans la source de contrôle? Une partie de moi dit qu'il devrait et une autre partie en dire aucune. Il se sent mal à ajouter un 20mb bibliothèque qui éclipse l'ensemble de l'application tout simplement parce que vous compter sur un couple de fonctions à partir d'elle (mais assez fortement). Devrait vous venez de stocker le pot à l'/dll ou peut-être même l'distribué zip/tar du projet?
Ce que font les autres?
Vous devez vous connecter pour publier un commentaire.
Ainsi que d'avoir des bibliothèques tierces dans votre référentiel, il vaut la peine de le faire de telle manière qu'il est facile de suivre et de fusion dans les futures mises à jour de la bibliothèque facilement (par exemple, des correctifs de sécurité, etc.). Si vous utilisez Subversion à l'aide d'un bon branche vendeur en vaut la peine.
Si vous savez que ce serait un jour froid en enfer avant que vous serez en modifiant votre troisième partie du code, puis (comme @Matt Sheppard a dit) externe de sens et vous donne l'avantage supplémentaire qu'il devient très facile de passer à la dernière version de la bibliothèque mises à jour de sécurité ou une nouvelle fonctionnalité rendre que désirables.
Aussi, vous pouvez sauter externes lors de la mise à jour de votre base de code épargne sur le long et lent processus de chargement en cas de besoin.
@Stu Thompson mentionne le stockage de la documentation, etc. contrôle de code source. Dans les grands projets, j'ai stocké l'ensemble de nos "clients" dans le dossier de contrôle à la source, y compris les factures /factures/les minutes de la réunion /spécifications techniques etc. L'ensemble de la fusillade. Bien que, hum, ne pas oublier de stocker ces informations dans un référentiel DISTINCT de celui que vous aurez à faire pour les autres développeurs, et le client; votre navigateur "voir la source"...la toux... 🙂
stocker tout ce dont vous aurez besoin pour construire le projet de 10 ans à partir de maintenant.Je stocker la totalité du zip de la distribution de n'importe quelle bibliothèque, juste au cas où
Modifier pour 2017:
Cette réponse n'a pas d'âge bien:-). Si vous êtes toujours à l'aide de quelque chose de vieux, comme ant ou de faire, le ci-dessus s'applique toujours. Si vous utilisez quelque chose de plus moderne comme maven ou graddle (ou Nuget sur .net par exemple), avec gestion de la dépendance, vous devriez être en cours d'exécution d'une dépendance de gestion de serveur, en plus de votre serveur de contrôle de version. Tant que vous avez de bonnes sauvegardes des deux, et votre gestion de la dépendance serveur ne supprime pas les anciennes dépendances, vous devriez être ok. Pour un exemple d'une dépendance de gestion de serveur, voir par exemple Sonatype Nexus ou JFrog Artifcatory, parmi beaucoup d'autres.
Ne pas stocker les bibliothèques; ils ne sont pas à proprement parler partie de votre projet et uselessy prendre de place dans votre système de contrôle des révisions. Cependant, l'utilisation maven (ou Ivy pour ant construit) pour garder une trace de ce que les versions de bibliothèques externes dans votre projet. Vous devez exécuter un miroir de l'opération au sein de votre organisation (sauvegardé) pour vous assurer de toujours avoir les dépendances sous votre contrôle. Cela devrait vous donner le meilleur des deux mondes externes; pots à l'extérieur de votre projet, mais toujours de manière fiable, disponible et facilement accessible.
Nous stockons les bibliothèques dans le contrôle de source parce que nous voulons être en mesure de construire un projet en cochant simplement le code source et l'exécution du script de construction. Si vous n'êtes pas en mesure d'obtenir la plus récente et la construction en une seule étape, alors vous n'allez courir dans des problèmes plus tard.
ne rangez jamais votre 3ème partie de binaires de contrôle de code source. Systèmes de contrôle de Source sont des plates-formes qui prennent en charge simultanée de partage de fichiers, en parallèle, un travail, la fusion des efforts, et de changer l'histoire. Contrôle de la Source n'est pas un site FTP pour les fichiers binaires. 3ème partie-ensembles ne sont PAS de code source; ils changent peut-être deux fois par SDLC. Le désir d'être en mesure de nettoyer votre espace de travail propre, de tirer tout vers le bas à partir de la source de contrôle et de construire ne signifie pas 3ème partie les assemblages doivent être coincé dans le contrôle de source. Vous pouvez utiliser des scripts de contrôle de traction de la 3e partie des assemblages à partir d'un serveur de distribution. Si vous êtes inquiet au sujet de contrôle de la branche/de la version de votre application utilise un particulier 3e partie composante, alors vous pouvez contrôler que par le biais de scripts de construction ainsi. Les gens ont mentionné Maven pour Java, et vous pouvez faire quelque chose de similaire avec MSBuild pour .Net.
- Je stocker dans le référentiel, mais je ne sympathise avec votre désir de garder la taille vers le bas.
Si vous ne les stockez pas dans le référentiel, le faire absolument besoin d'être archivés et numérotés en quelque sorte, et de construire votre système a besoin de savoir comment les obtenir. Beaucoup de gens dans le monde Java semblent utiliser Maven pour récupérer automatiquement les dépendances, mais je n'ai pas utilisé je l'ai, donc je ne peux pas vraiment recommander pour ou contre elle.
Une bonne option pourrait être de garder un référentiel des systèmes tiers. Si vous êtes sur la Subversion, vous pouvez alors utiliser subversion de l'alias de soutien pour vérifier automatiquement les bibliothèques de l'autre référentiel. Sinon, je te suggère de garder un intérieur FTP Anonyme (ou similaire) serveur que votre système de construction peut récupérer automatiquement des exigences de. Évidemment, vous aurez envie de vous assurer de conserver toutes les anciennes versions de bibliothèques, et tout ce qu'il y sauvegardés avec votre référentiel.
Ce que j'ai est un intranet de type Maven repository où tous les 3ème partie les bibliothèques sont stockées (pas seulement les bibliothèques, mais leurs source de distribution de la documentation, de la Javadoc et tout et tout). Les raisons sont les suivantes:
J'ai tout mis sauf le JDK IDE et du contrôle de code source.
Tony la philosophie de son. N'oubliez pas de base de données des scripts de création et structure de données mise à jour des scripts. Avant de wikis est sorti, je l'ai utilisé pour stocker nos documents de contrôle de source.
Ma préférence est pour stocker des bibliothèques tierces dans une dépendance référentiel (Artifactory avec Maven par exemple) plutôt que de les conserver dans la Subversion.
Depuis bibliothèques tierces ne sont pas gérés ou versionnées comme le code source, il ne fait pas beaucoup de sens de se mêler à eux. Développeurs à distance apprécie aussi de ne pas avoir à télécharger de grandes bibliothèques lent WPN lien quand ils peuvent obtenir plus facilement à partir de n'importe quel nombre de dépôts publics.
À un employeur précédent, nous avons stocké tout ce qui est nécessaire pour construire l'application(s) dans la source de contrôle. Tourner une nouvelle version de la machine était une question de synchronisation avec la source de contrôle et d'installer le logiciel nécessaire.
Magasin de bibliothèques tierces dans le contrôle de code source, de sorte qu'ils sont disponibles si vous vérifiez votre code à un nouvel environnement de développement. Tout "comprend" ou de construire des commandes que vous pouvez avoir dans les scripts de compilation devrait également référence à ces "locaux" copies.
Ainsi que de la troisième partie du code ou les bibliothèques qui dépendent sont toujours disponibles pour vous, il faudrait également que le code est (presque) prêt à construire sur un nouveau PC ou d'un compte d'utilisateur lorsque de nouveaux développeurs de se joindre à l'équipe.
Stocker les bibliothèques! Le référentiel doit être un instantané de ce qui est nécessaire pour construire un projet à n'importe quel moment dans le temps. Comme le projet nécessite une version différente de bibliothèques externes, vous souhaitez mettre à jour /vérifier dans les versions plus récentes de ces bibliothèques. De cette façon vous serez en mesure d'obtenir toutes les version d'aller avec un vieux cliché si vous devez patcher une version antérieure etc.
Personnellement, j'ai une dépendances de dossier dans le cadre de mes projets et de store référencés bibliothèques de là.
Je trouve cela rend la vie plus facile, car je travaille sur un certain nombre de différents projets, souvent avec des inter-selon les pièces qui ont besoin de la même version d'une bibliothèque, il n'est pas toujours possible de mettre à jour vers la dernière version d'une bibliothèque donnée.
Avoir toutes les dépendances utilisées au moment de la compilation pour chaque projet, ce qui signifie que dans quelques années la ligne lorsque les choses ont évolué, je peux encore construire n'importe quelle partie d'un projet sans avoir à vous soucier d'autres parties. La mise à niveau vers une nouvelle version d'une bibliothèque est simplement un cas de remplacement du fichier et la reconstruction de composants connexes, pas trop difficile à gérer si besoin.
Cela dit, je trouve la plupart des bibliothèques de je de référence sont relativement petits, pesant autour de quelques centaines de ko, rarement plus, ce qui le rend moins d'un problème, pour moi, de les coller dans le contrôle de source.
L'utilisation de git sous-projets, et soit de référence à partir de la 3ème partie principale de la bibliothèque de dépôt git, ou (s'il n'en a pas) créer un nouveau dépôt git pour chaque bibliothèque. Il n'y a rien raison pour laquelle vous êtes limité à seulement un dépôt git, et je ne vous recommande pas d'utiliser quelqu'un d'autre projet que de simplement un répertoire sur votre propre.
stocker tout ce dont vous aurez besoin pour construire le projet, de sorte que vous pouvez les tester et de les construire sans rien faire.
(et, comme quelqu'un qui a connu la douleur - veuillez conserver une copie de tout ce qui est nécessaire pour obtenir le contrôle installé et fonctionne sur une plate-forme de dev. Une fois, j'ai un projet qui pourrait construire - mais sans un fichier d'installation et reg clés, vous ne pouvez pas apporter de modifications à la tierce partie de contrôle de la mise en page. C'était un plaisir de réécriture)
Vous avez à stocker tout ce dont vous avez besoin pour construire le projet.
En outre, différentes versions de votre code peut avoir différentes dépendances sur 3 parties.
Vous aurez envie de direction de votre code en version de maintenance avec sa 3e partie des dépendances...
Personnellement, ce que j'ai fait et ont apprécié les résultats est de stocker des bibliothèques dans un autre référentiel et de les lier à chaque bibliothèque et que j'ai besoin de mes autres dépôts par le biais de l'utilisation de la Subversion svn:externals fonctionnalité. Cela fonctionne bien parce que je peux garder versionnées des copies de la plupart de nos bibliothèques (principalement géré .NET assemblages) dans le contrôle de source sans eux gonflement jusqu'à la taille de notre principal référentiel de code source à tous. Avoir les assemblées stockées dans le référentiel dans ce mode fait en sorte que le serveur de build ne pas avoir installé de faire un build. Je dirai que l'obtention d'un build pour réussir en l'absence de Visual Studio installé était une corvée, mais maintenant que nous l'avons eu, nous sommes heureux avec elle.
Noter que nous n'avons pas actuellement l'utilisation de nombreux commerces de contrôle tiers des suites ou ce genre de chose que beaucoup de sorte que nous n'avons pas courir sur les questions de licences où il peut être nécessaire d'installer un kit de développement logiciel sur le serveur de build, mais je peux voir où que l'on pourrait facilement devenir un problème. Malheureusement je n'ai pas de solution et un plan pour y remédier quand j'ai exécutez en elle.