2010-09-03 18 views
2

Je sais que les gens recommandent que les externes doivent toujours pointer vers des étiquettes ou être épinglés à des révisions spécifiques (ou les deux pour la brigade ceintures-et-braces!). Je suis à l'aise avec cette approche lorsque l'externe pointe vers une dépendance immuable ou en évolution lente. Cependant, parfois j'ai besoin de prendre un externe sur une dépendance qui change rapidement et alors il est moins d'effort (quoique plus risqué) de placer l'externe pour pointer vers le tronc de la dépendance.Externes SVN - y a-t-il quelque chose entre les externes flottants et épinglés?

Ce que j'aimerais vraiment, c'est une fonctionnalité intermédiaire que je vais appeler un "tracking externe". Ils façon dont il devrait fonctionner est la suivante:

a) Si j'extrais par checkout tête, je reçois la tête de l'extérieur

b) Si je vérifie la révision X, je reçois la révision X du

externe

Cela me permettrait de toujours recréer d'anciennes révisions mais aussi de m'exposer aux derniers changements de la dépendance.

Cette fonctionnalité ne semble pas exister dans SVN, mais elle semble être une fonctionnalité évidente à implémenter. Est-ce que quelqu'un sait si cette fonctionnalité existe ou est prévue, ou si elle peut être émulée par une supercherie SVN?

Merci Akash

Répondre

1

Je pense que ce que vous demandez n'est pas l'utilisation correcte des externes. Vous le faites mal. Les codes externes tirent le code de ... ailleurs. Cet 'ailleurs' pourrait être un emplacement différent dans votre dépôt actuel, ou il pourrait s'agir d'un référentiel différent sur votre machine, ou d'un référentiel hébergé sur une machine à l'autre bout du monde ...

En dehors de certains situation particulière où vous gardez votre référentiel et les externes dans revision-lockstep (ce que vous pourriez faire si vos externes sont tirés d'un emplacement différent dans le même référentiel), voulant vérifier la révision X de votre dépôt avec la même révision X dans le (s) référentiel (s) externe (s) va se terminer par un échec. Comment pouvez-vous vous assurer que les révisions des référentiels principaux restent synchronisées avec les révisions de référentiels externes? Que se passe-t-il lorsque votre référentiel est à la révision 1000 et que le référentiel external'd n'est qu'à la révision 300?

Pour essayer de répondre à votre question: je ne sais pas si quelque chose comme ça est prévu pour les futures versions de SVN, mais je ne parierais pas. En ce qui concerne la "supercherie", vous pourriez peut-être y parvenir en créant une sorte de script d'encapsulation qui pourrait modifier les propriétés externes pour les épingler à la révision de votre planification avant de partir. Pas quelque chose que je considérerais comme pratique, ni entièrement trivial.

+0

Merci, j'aurais dû préciser que je tire des externals du même référentiel. Je suis entièrement d'accord que mon cas d'utilisation est sans signification autrement. Pensez-vous que dans ce cas particulier, l'utilisation d'externals est toujours incorrecte? Cela me semble être un scénario valable. – Akash

+1

Je pense que votre projet n'utilise pas l'utilisation prévue d'externals. Que cela équivaut à «incorrect» est à vous. Personnellement, j'y renoncerais. Cela devient une béquille/un cas spécial dans votre dépôt. Si, à l'avenir, pour quelque raison que ce soit, vous avez besoin ou voulez séparer les externals dans différents référentiels, vous devrez changer/arrêter d'utiliser votre schéma d'épinglage externe spécialisé ... Au lieu de changer votre méthodologie maintenant (une petite «douleur»), vous risquez de causer beaucoup plus de chagrin/douleur dans le futur. – Yoopergeek

0

Si vous utilisez juste une branche dans un externe sans spécifier une révision particulière que cette externe est flottante qui signifie que chaque fois que vous mettez à jour, vous obtiendrez la tête de cette branche ... Vous pouvez Faites de même en utilisant le coffre. Mais avant de vous lancer, vous devez épingler ce externe à un état particulier, la meilleure pratique consiste à utiliser une balise pour cela.

+0

Désolé, j'ai mis de l'ordre dans la mise en forme de ma question pour clarifier ce que je recherche. Je * ne veux pas * un flottant externe normal, ni je veux un épinglé. Je veux un qui me reçois la révision X de l'externe quand je vérifie la révision X de mon code et obtient la révision Y de l'externe quand je vérifie la révision Y de mon code. – Akash