Meilleures pratiques pour les projets Subversion et Visual Studio

J’ai récemment commencé à travailler sur divers projets C # dans Visual Studio dans le cadre d’un plan pour un système à grande échelle qui sera utilisé pour remplacer notre système actuel construit à partir de plusieurs programmes et scripts écrits en C et Perl. Les projets sur lesquels je travaille ont atteint une masse critique pour être engagés dans la subversion. Je me demandais ce qui devrait et ne devrait pas être engagé dans le référentiel pour les projets Visual Studio. Je sais que cela va générer divers fichiers qui ne sont que des artefacts de compilation et n’ont pas vraiment besoin d’être validés, et je me demandais si quelqu’un avait des conseils pour utiliser correctement SVN avec Visual Studio. Pour le moment, j’utilise un serveur SVN 1.6 avec Visual Studio 2010 beta. Tout conseil, avis sont les bienvenus.

Selon MSDN :

Vous pouvez append les fichiers suivants au contrôle de code Visual Studio:

  • Fichiers de solution ( *.sln ).
  • Fichiers de projet, par exemple, *.csproj , *.vbproj .
  • Les fichiers de configuration d’application, basés sur XML, permettent de contrôler le comportement d’exécution d’un projet Visual Studio.

Les fichiers que vous ne pouvez pas append au contrôle de source sont les suivants:

  • Fichiers d’options utilisateur de la solution ( *.suo ).
  • Fichiers d’options utilisateur du projet, par exemple, *.csproj.user , *.vbproj.user .
  • Fichiers d’informations Web, par exemple *.csproj.webinfo , *.vbproj.webinfo , qui contrôlent l’emplacement de la racine virtuelle d’un projet Web.
  • Créez des fichiers de sortie, par exemple, des fichiers *.dll et *.exe .

Je suggère d’utiliser AnkhSVN – un plugin de contrôle de source Subversion pour Visual Studio 2008/2010.

Vous pouvez l’utiliser pour effectuer votre ajout et validation initiaux de la solution, des projets et des sources dans le référentiel, sans append aucun des artefacts de génération. Il n’appenda rien de ce qui est généré par votre version, mais uniquement des fichiers référencés par votre solution. Si vous avez besoin d’autres éléments qui ne figurent pas dans votre solution, vous pouvez les append ultérieurement.

Placez les fichiers suivants dans le contrôle de version:

  • .dsw (espace de travail VS6)
  • .dsp (projet VS6)
  • .sln (solution VS)
  • . * proj (fichiers de projet VS de différents types)
  • bien sûr, vos fichiers source et autres artefacts que vous créez

Ne mettez pas les fichiers suivants dans le contrôle de version:

  • .ncb (quelque chose à voir avec la navigation ou intellsense)
  • .suo (parameters d’espace de travail de l’utilisateur tels que le placement de la fenêtre, etc.)
  • .user (parameters du projet utilisateur tels que les points d’arrêt, etc.)

De même, ne placez aucun fichier object, exécutable, fichier généré automatiquement (comme les en-têtes pouvant être générés).

En ce qui concerne les fichiers exécutables et autres fichiers générés, il peut exister une exception si vous souhaitez pouvoir archiver les versions. Cela peut être une bonne idée, mais vous voudrez probablement gérer cela un peu différemment et peut-être à un endroit différent de votre code source. Si vous faites cela, archivez également vos fichiers .pdb pour pouvoir déboguer les fichiers plus tard. Vous pouvez utiliser un serveur de symboles pour stocker vos symboles archivés (voir Outils de débogage pour Windows pour le serveur de symboles et sa documentation).

Voici ma liste de fichiers spécifiques à VS que j’exclus de SVN:

 Ankh.Load *.projdata *.pdb *.positions *proj.user *proj.*.user *.ncb *.suo *.plg *.opt *.ilk *.pch *.idb *.clw *.aps 

Niveau de solution:

  • Ajouter le fichier de solution .sln
  • ignore le .suo d’options utilisateur de la solution .suo

Niveau du projet:

  • Ajouter les .csproj , .vbproj (et c ++ proj?)
  • ignorez les fichiers .csproj.user , .vbproj.user
  • ignorer le répertoire bin
  • ignore le répertoire obj
  • ignore tous les fichiers / répertoires générés pendant l’exécution (c.-à-d. les journaux)

Si vous utilisez des addins VS, ils peuvent générer des fichiers qui doivent également être ignorés (par exemple, ReSharper génère des fichiers .resharper et .resharper.user ).

Les éléments ignorés peuvent être ignorés explicitement par le nom de fichier (c.-à-d. MyProject.csproj ) ou par un modèle de caractère générique (par exemple, *.csproj.user ).


Une fois que vos ignores sont configurés, l’extraction d’une copie propre de votre source, puis de la construction, ne doit alors montrer aucune modification (c.-à-d. Aucun nouveau fichier sans version).

Je voudrais inclure manuellement tous les fichiers que je pense que je ne devrais pas contrôler la version.

Mon modèle global ignoré est:

.dll .pdb .exe .cache .webinfo .snk bin obj debug _Resharper .user redirige

Si vous utilisez la liste des ignorés, SVN est sensible à la casse. N’oubliez donc pas d’ignorer les dossiers bin et Bin séparément.

De plus, j’avais une question .. pourquoi faut-il beaucoup de temps pour rafraîchir l’icône d’état? Parfois, cela devient très déroutant.

Voir les projets Mercurial .hgignore pour Visual Studio 2008 pour une liste d’ ignorations Mercurial. Je ne suis pas familier avec la syntaxe de la liste des ignorés SVN mais ce thread a quelques bonnes listes de ce qu’il faut ignorer dans Visual Studio.