2009-05-17 9 views
9

Nous avons un framework d'application web que nous voulons utiliser avec Subversion. Nous avons déjà essayé plusieurs fois de le configurer, mais la partie génération de code de notre application pose problème. Le problème est que le code généré par un développeur peut être dans un fichier plus récent que celui d'un autre développeur, mais le contenu du nouveau fichier peut être plus ancien, car les fichiers code et xml qui sont à la base de la génération du code a été mis à jour par le développeur nr2. Une solution que nous avons envisagée est d'exclure les fichiers générés par le code, mais nous obtenons souvent de nouveaux fichiers qui sont générés, et ils sont automatiquement ajoutés au référentiel sauf si nous nous souvenons de l'exclure, et nous devons vérifier manuellement dans les derniers fichiers générés. Et comment savez-vous si vous avez le dernier fichier généré?Subversion - traitant de la génération de code

Une suggestion sur la façon de résoudre ce problème dans Subversion?

Répondre

24

La meilleure façon de décider si quelque chose devrait être dans Subversion est de se rappeler qu'il s'agit d'un système de contrôle de version . Si vous n'avez pas besoin de vous rappeler comment il a changé au fil du temps, il n'a pas besoin d'être dans svn. Utilisez svn:ignore pour exclure des fichiers d'une telle considération.

C'est le cas ici: peu importe comment les fichiers générés ont changé au fil du temps, seulement le code original utilisé pour les produire. Cela signifie qu'ils devraient être exclus de Subversion. Vous pouvez le faire avec un hook de pré-validation - en faisant en sorte, par exemple, que tous les fichiers générés par le code ne soient jamais validés. J'ai une phrase favorite pour cette tactique: "Version la recette, pas le gâteau."

Et comment savez-vous si vous avez le dernier fichier généré?

Exactement; vous ne le faites pas, car les fichiers générés dépendaient de la source utilisée pour les créer. Votre prochaine étape consiste à s'assurer que votre processus de génération génère automatiquement ces fichiers en fonction du code source initial, mais il s'agit probablement d'une question StackOverflow distincte si vous ne savez pas déjà comment procéder.

+4

+1. "Version la recette, pas le gâteau" - très bien! –

4

Vous devez utiliser svn:ignore, car vous ne voulez vraiment pas valider le contenu généré automatiquement dans Subversion.

+1

@krosenvold: je ne suis pas sûr d'être d'accord avec ça. Si vous voulez restaurer à un moment donné, ne pas avoir les fichiers générés dans SCC rend les choses très difficiles. J'ai toujours mis du code généré dans SCC. –

+0

@Mitch, pourquoi ne pouvez-vous pas régénérer les fichiers après l'annulation? –

+0

Je suppose que cela dépend de ce que vous générez ... –

2

Peut-être que je suis simple, mais je ne stockerais pas les fichiers générés dans le contrôle de version. Depuis qu'il est généré, il ne fait pas de garder un historique de version de celui-ci. Avec le code et XML pour générer le contrôle de version, vous pouvez toujours générer le code pour chaque version.

10

Une solution que nous avons examiné est d'exclure le code des fichiers générés

Oui! Mille fois oui! Ne contrôlez jamais la version des fichiers que vous pouvez générer à partir d'autres fichiers. Au lieu de cela, ajoutez les règles de génération à votre makefile (ou autre script de construction).

ils sont automatiquement ajoutés au référentiel

Ce qui est automatiquement les ajouter? Pour autant que je me souvienne, j'ai toujours dû ajouter des fichiers manuellement. Si l'outil qui ajoute automatiquement est faux, alors peut-être que la réparation de cet outil est la bonne solution.

à moins que nous nous souvenons de l'exclure

Avez-vous outil de génération ajouter un commentaire disant « fichier généré automatiquement par $ OUTIL », et d'ajouter un crochet de subversion qui greps les fichiers pour ce commentaire et les rejette. Faire des provisions appropriées pour les outils de génération de code; comme: si le fichier contient le commentaire "autogénéré", ajoutez-le de toute façon s'il a aussi "svn rejet sauf" dans un commentaire sur la même ligne (s). Et comment savez-vous si vous avez le dernier fichier généré? En le générant à partir de la dernière recette, qui se trouve dans la dernière validation Subversion.

+0

+1. Utiliser grep pour vérifier automatiquement l'autogénération est une bonne idée. –

0

Une autre bonne stratégie n'est pas d'écrire du code dans les fichiers générés. Gardez-les séparés. Ensuite, peu importe qui les génère, cela n'aura pas d'importance.

Gardez votre logique hors d'un fichier généré.

+0

Je ne pense pas que l'auteur parlait de ** éditer manuellement le code source autogénéré **, ce qui est quelque chose à éviter comme la peste. –

0

Nom généré quelque chose comme "className.autoGenerated.cs" et ajouter récursif svn: ignorer attribut avec le modèle de nom correspondant "* .autoGenerated.cs".

Questions connexes