7
votes

Visual Studio, Svn et Fusion de fichiers .Csproj et .SLN.

Quiconque a eu un succès à obtenir SVN pour fusionner les fichiers Visual Studio Project (.CSPROJ) ou Solution (.sln) modifiés par deux utilisateurs? Exemple

  1. utilisateur un projet de chèques
  2. L'utilisateur B vérifie le même projet
  3. utilisateur A ajoute un fichier
  4. utilisateur a commises des modifications
  5. utilisateur B ajoute un fichier
  6. l'utilisateur B commet des modifications

    me semble que à l'étape (6), SVN, la tortue, l'ankh ou tout ce qui devrait détecter un conflit et fusionner automatiquement les deux fichiers de projet automatiquement ou, plus probablement, l'utilisateur rapide B de résoudre le conflit. Actuellement, nous constatons des modifications apportées par l'utilisateur une oblitérée lorsque l'utilisateur B vérifie, ce qui entraîne des mauvaises constructions, des déploiements, etc. Caractéristiques manquantes qui avaient été ajoutées avant le dernier checkin.

    Étant donné que les fichiers de projet sont XML, pourquoi est-ce un problème? Est-ce que j'ai râté quelque chose? J'ai cherché les archives ici et j'ai googlé à je ne peux plus parler de Google, mais je n'ai pas marché une bonne solution.


4 commentaires

Avez-vous défini correctement le type MIME sur les fichiers?


Le commit de l'utilisateur B aurait dû être rejeté car son dossier était obsolète, le forçant à mettre à jour (et à fusionner - la plupart des modifications sont en effet géré automatiquement).


Ouais, à l'étape 6, le client SVN devrait signaler que la copie de travail est obsolète. Quelque chose doit être faux quelque part, car cela fonctionne pour nous.


J'aurais définitivement eu lieu si les utilisateurs A et B sont sur des branches de fonctionnalités distinctes et que cela avec l'ajout de projets aux solutions (par opposition à l'ajout de fichiers à des projets). Cela peut être un sujet séparé, bien que ...


5 Réponses :


32
votes

Comment pensez-vous que vous êtes tromper SVN dans la mesure de l'étape 6? Il semble que vous ayez mal compris ce qui ne va pas. svn ne s'engagera jamais à partir d'une copie de travail qui n'est pas à jour , donc l'étape n ° 6 ne fonctionnera pas sans l'utilisateur B précédemment mise à jour et fusionner les modifications de l'utilisateur. Honnêtement. Essayez-le.

Je suppose que ce qui se passe à la place, c'est ce:

  1. Un projet de chèques.
  2. B vérifie le même projet.
  3. a ajoute un fichier.
  4. un changement changements.
  5. B ajoute un fichier, mais oublie de sauvegarder le projet / la solution.
  6. B tente de commettre des changements et d'obtenir un message qu'il devrait mettre à jour en premier.
  7. B Mises à jour.
  8. B passe de retour à vs. Vs lui dit que le projet / la solution a changé sur le disque et demande s'il souhaite a) recharger à partir du disque et perdre ses modifications B) remplacer la version sur disque.
  9. B ne comprend pas, n'essaie pas de comprendre, considère ses modifications précieuses et des choix b), remplace les modifications apportées sur le disque.
  10. B n'essaie toujours pas de comprendre et ne diffère donc pas la version qu'il a sur le disque avec le dernier engagé et donc manque à ce qu'il a survolé les changements de A.
  11. B chèques dans, remplace les modifications de A.

    J'ai vu cela se produire de temps en temps, généralement avec un utilisateur B qui ne comprend pas vraiment le flux de travail de SVN (ou CVS ', FTM).

    Voici donc quelques indices:

    ne mettez pas à jour à moins que vous n'ayez tout sauvegardé ("Fichier" -> "Enregistrer tout"; pour moi, c'est Ctrl + Maj + s). Si vous auriez fait cette erreur et que vous êtes bloqué, effectuez les modifications apportées sur le disque, puis fusionner les changements perdus manuellement . (Cela pourrait également fonctionner pour mettre à jour le fichier de projet / solution à la version N-1, puis à la tête à nouveau, afin d'effectuer SVN effectuer la fusion.)

    ne vous engagez pas sans vérifier quels fichiers que vous avez changés et que vous avez un regarde le diffs à Voir si les changements sont ce que vous attendez.

    s'engager tôt, commettre souvent . Plus les développeurs travaillent sur la même base de code, plus vous obtiendrez probablement des conflits. Plus vous modifiez votre copie de travail sans mettre à jour, plus vous obtenez des conflits. Étant donné que le nombre de développeurs est généralement hors de vos mains, la fréquence de mise à jour est la seule chose que vous pouvez utiliser pour réduire la probabilité de conflits.


1 commentaires

Cela semble très familier. Cela peut être plus d'une question de formation qu'un problème technique. = /



1
votes

Une solution plutôt radicale mais efficace consiste à utiliser un outil pour générer ces fichiers de solution à partir d'une méta-définition, puis à ne mettre que la méta-définition sous contrôle source, et non les fichiers de projet Visual Studio (qui sont un cauchemar à fusionner).

Dans mon équipe, nous utilisons MPC pour le faire. Nous avons:

  • Un tas de fichiers .mpc pour descriptions de projet,
  • Un fichier .mwc pour espace de travail / description de la solution,
  • Un petit .cmd pour générer des fichiers Visual Studio.

    Comme ils sont tous des fichiers texte modifiés à la main, nous n'avons plus de problèmes avec Visual Studio Mélange tout.

    Les inconvénients sont un outil extra-outil et la nécessité de régénérer les fichiers de solution lorsque des fichiers sont ajoutés ou supprimés, mais également des avantages supplémentaires:

    • Les configurations de projet sont centralisées: Par exemple, la modification d'un drapeau de compilation est effectuée en une seule place au lieu de par projet,
    • Cela peut accueillir plusieurs systèmes de construction (nous utilisons actuellement Visual 2003 et 2005, mais cela fonctionne également avec GCC et autres).

      De mon expérience, Althgough Configuration de l'outil peut être un peu douloureux (mais tout dépend de la taille et de la complexité de votre projet), cela en vaut clairement la peine.

      Notez que MPC n'est pas le seul outil à cet effet. D'autres existent, tels que CMAKE .


0 commentaires

2
votes

i deuxième réponse de SBI. Une solution possible consiste à toujours mettre à jour à partir de Visual Studio, au moins si vous utilisez VisualSvn (je ne sais pas comment Ankhsvn aboutit à cette situation).

VisualSvn bloquera Visual Studio pendant l'opération de mise à jour et assurez-vous que tout projet modifié est automatiquement rechargé. Les utilisateurs ne peuvent pas ignorer les modifications externes.


0 commentaires

1
votes

Vous pouvez également essayer de réduire les conflits en veillant à ce que vos fichiers de projet ne listent pas tous les fichiers individuels à l'intérieur du projet. Cela évitera que le fichier de projet d'être modifié en premier lieu lorsqu'un utilisateur ajoute un fichier.

Vous êtes libre d'utiliser des caractères génériques dans un fichier de projet: Voir msdn p>

Exemple: P>

<ItemGroup>
  <Compile Include="Src\**\*.cs" />
  [...]
</ItemGroup>


0 commentaires

0
votes

C'est très fastidieux et fatigant pour que vous ne puissiez pas labourer. Vous garderez parfois la copie de travail locale car elle a ajouté tous vos projets personnalisés. Cependant, dans d'autres cas, vous voudrez fusionner dans tous les nouveaux articles de la solution de base afin de vous retrouver avec tout, des deux fichiers de sols. Pour la lisibilité, il est préférable de placer toutes les ajouts de base avant les ajouts de personnalisation.

Ne vous inquiétez pas que la première partie du GUID est identique pour les projets, mais c'est la dernière partie qui sera unique.

fissh


0 commentaires