2010-12-01 68 views
3

Nous avons une bibliothèque plutôt volumineuse que nous devons importer périodiquement (et ensuite corriger) à notre base de code. Le livre SVN semble recommander un schéma de «branche fournisseur» dans lequel nous conservons notre version corrigée des «baisses de fournisseur». Cela fonctionnerait, sauf que le vendeur utilise également SVN et nous donne un accès en lecture à leur reop.SVN: branches du vendeur + patching + historique?

Ce serait génial d'avoir accès à l'historique des fichiers fournisseurs lorsque nous devons mettre à jour nos correctifs.

Ma question est la suivante:

Est-il possible d'avoir une « branche de fournisseur » qui a également patché garde en quelque sorte accès à l'historique des fichiers de fournisseurs?

(je l'ai vu de mention svn:. Dossiers externes, mais je ne suis pas sûr que je comprends vraiment toutes les ramifications en termes d'ancrage d'une révision, ni comment exactement nous maintenir nos propres patches contre cela)

Quelle est la route correcte à prendre ici? (FWIW, les fournisseurs de presse une fois par mois. Nous avons l'intention de tirer des mises à jour sur une fois/deux fois par an.)

Merci

+0

Ce n'est pas la réponse que vous attendiez, mais (même si j'aime vraiment svn) si vous prévoyez de travailler avec des branches intensivement, alors SVN pourrait ne pas être une bonne décision pour vous. Au lieu de SVN je vous propose de regarder Mercurial ou GIT Mercurial est plus simple, je l'utilise pour mes projets privés, et GIT est plus puissant. – zerkms

+1

@zerkms Oui, SVN est une "exigence de l'entreprise", malheureusement. Pas de choix en la matière. – nonot1

+0

@zerkms, branchement fonctionne très bien dans Subversion.Il suffit de savoir utiliser les outils et maîtriser les techniques et méthodologies de contrôle de version. – jgifford25

Répondre

2

Ok, voici ce que le bât blesse, vous voulez la source du fournisseur ainsi que l'histoire, mais vous aussi appliquez votre patch à la source du fournisseur. Obtenir leur source avec l'histoire est facile. Obtenir leur source avec l'histoire et ensuite appliquer vos correctifs et continuellement faire cela, c'est difficile. Maintenant, en supposant que vous ne placiez pas le répertoire source du fournisseur dans votre source (ce qui signifie que vous construisez les deux projets séparément), vous avez deux options si vous conservez les deux sources dans des référentiels distincts.

Si vous souhaitez que la source des fournisseurs soit associée à l'historique, vous pouvez configurer svnsync dans le référentiel des fournisseurs et effectuer leurs modifications à intervalles réguliers. Svnsync est une manière merveilleuse d'obtenir quelque chose à distance en tant que copie locale avec un ensemble complet d'histoire. Mais le seul inconvénient de svnsync est que le dépôt devient en lecture seule. Vous ne pouvez donc pas appliquer le correctif à leur source. Maintenant, puisque vous ne le faites qu'une ou deux fois par an, vous pouvez faire une nouvelle copie de leur dépôt en utilisant svnsync. Casser la synchronisation et rendre votre copie du repo du vendeur accessible en écriture, puis appliquer vos patches.

L'autre option serait que le vendeur fasse une décharge de son dépôt et vous l'envoie. Ensuite, vous chargez cette sauvegarde dans votre propre dépôt et faites en lecture/écriture.

Avec l'une ou l'autre option, vous devrez réappliquer vos correctifs à votre copie du référentiel du fournisseur chaque fois que vous passez par ce processus. Au moins, vous ne faites cela qu'une ou deux fois par an.

Maintenant, si vous devez avoir leur source dans votre source, faites toujours ce qui est indiqué ci-dessus, mais utilisez svn: external comme vous l'avez noté dans votre question. Vous devrez toujours appliquer les correctifs que vous devez apporter à la source du fournisseur dans votre copie du référentiel du fournisseur.

+0

Pouvez-vous préciser ce que vous vouliez dire par svn: externals? Puis-je maintenir une branche patched dans mon propre repo basé sur svn: external? – nonot1

+1

Clarification de l'utilisation de svn: externals: Vous auriez la source du fournisseur dans son propre référentiel avec vos correctifs spécifiques à la source du fournisseur. Si votre projet (dans son propre référentiel) compile également la source du fournisseur corrigé avec sa propre source, l'utilisation de svn: externals serait la meilleure solution pour cela. C'est parce que vous avez indiqué que vous tirez périodiquement les nouvelles versions de la source des fournisseurs. Cela vous permettrait d'échanger la source du vendeur plus facilement. – jgifford25

+1

@ nonot1: Je ne traiterais pas la source du fournisseur comme une branche, mais un projet distinct stocké dans son propre référentiel. Cela faciliterait l'automatisation de l'actualisation de la source du fournisseur. Mais avoir la source du fournisseur dans un référentiel séparé agit comme une branche à laquelle vous pouvez appliquer vos propres correctifs. De là, vous pouvez utiliser svn: externals pour l'inclure dans votre source de projets (si besoin est). – jgifford25