2009-12-27 5 views
2

Dans certains projets, je dois gérer plus d'un langage de programmation (par exemple une application graphique Delphi qui communique avec une application C# ou Java). Le référentiel Subversion contient actuellement trois branches principales, une par langue.Séparer les branches Subversion par langage de programmation?

Dois-je changer cela et regrouper toutes les parties du projet dans le coffre comme dans l'exemple suivant pour faciliter le branchement et le marquage au niveau du projet?

project1 
    branches 
    ... 
    tags 
    ... 
    trunk 
    csharp_app 
    delphi_app 
    java_app 
    ... 
project2 
... 

Répondre

9

Comme ces sous-projets distincts interagissent, ils ont besoin de se déplacer au même rythme, et vous avez besoin de marquer/branche/libérer le C#/Java/quelles que soient les composants ensemble. Si elles ne sont pas liées alors je préconiserais (peut-être) des référentiels distincts, ou des répertoires séparés dans le même référentiel. Mais pas de branches ou de tags.

Les branches sont utilisées pour gérer différents flux de développement sur la même base de code. Les tags sont utilisés pour indiquer un point particulier dans l'évolution du projet.

Je pense que le langage de programmation est sans importance. Demandez-vous quel est votre releasable et comment vous devez gérer cela. Je l'ai fait avec succès dans le passé avec des projets intégrant Java et C++, et la langue n'est pas le problème - elle maintient les composants en synchronisation que vous devez gérer.

Je ne créerais pas nécessairement un nouveau répertoire de premier niveau par langue. Que se passe-t-il si votre composant Java nécessite soudainement une couche JNI? Il me semble que l'implémentation est reflétée dans la structure de répertoires de niveau supérieur, et cela ne devrait pas vraiment être une préoccupation.

+0

Oui, j'ai écrit que les releasables interagissent. Se déplacer dans lockstep est ce dont j'ai besoin. – mjn

+0

Vous l'avez fait. Modifié de manière appropriée –

1

Je ne pense pas que ce soit une bonne idée, parce que théoriquement les différents composants peuvent compatibilité casser, et si elles ne restent pas synchronisés jusqu'à ce serait difficile de revenir à la dernière bonne config de travail.

+0

Quelle partie pourrait casser, voulez-vous dire le processus de construction du projet ou la migration vers la nouvelle mise en page du répertoire? – mjn

+0

Si vous placez les objets dans des troncs différents, ils ne se casseront pas. Je veux seulement dire que les différentes versions des différents composants ne fonctionneront pas ensemble. Donc, la version 20 du C# ne fonctionnera pas avec la version 5 des trucs java. Et si vous devez revenir à la version 5, vous devez maintenant vous rappeler quelle version du C# a fonctionné avec. Cela pourrait ne pas être très facile. - mais si tout est synchronisé, ce n'est pas un problème. –

3

Le langage de programmation n'est pas pertinent lorsque vous gérez un seul projet. Un seul module peut être écrit dans une variété de langages de programmation mais être encore trop étroitement lié à la séparation des valeurs. Si chaque module de l'application (qu'il soit écrit ou non dans la même langue) soit suffisamment indépendant pour être considéré comme un projet distinct (et par conséquent, devenir versionné indépendamment), vous pouvez vouloir le séparer. Sinon, ne faites pas ça.

+0

"Couplage serré" décrit mieux ce que j'aime réaliser. +1 – mjn

+0

En fait, le "couplage serré" est une mauvaise chose. voir: http://en.wikipedia.org/wiki/Coupling_%28computer_science%29#Advantages_and_disadvantages –

+2

Le couplage serré a des inconvénients, oui. Mais il faut un * lot * de l'époque. La plupart des bibliothèques/codes client sont "étroitement couplés" –

1

Oui. Le critère est de savoir si les applications nécessitent une certaine forme de synchronisation de leurs fonctionnalités entre elles, et que le protocole de communication (API, code partagé, bibliothèques partagées) peut changer au fil du temps. Si les applications n'ont rien à voir l'une avec l'autre, séparez les dépôts. Avoir des applications écrites dans plusieurs langues dans le référentiel n'est pas pertinent.

Questions connexes