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 p>
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. P>
É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. P>
5 Réponses :
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 em> strong>, 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. p>
Je suppose que ce qui se passe à la place, c'est ce: p>
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). p>
Voici donc quelques indices: P>
ne mettez pas à jour à moins que vous n'ayez tout sauvegardé em> strong> ("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 em>. (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.) P>
ne vous engagez pas sans vérifier quels fichiers que vous avez changés em> strong> et que vous avez un regarde le diffs em> strong> à Voir si les changements sont ce que vous attendez. p>
s'engager tôt, commettre souvent em> fort>. 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. p>
Cela semble très familier. Cela peut être plus d'une question de formation qu'un problème technique. = /
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). p>
Dans mon équipe, nous utilisons MPC pour le faire. Nous avons: p>
Comme ils sont tous des fichiers texte modifiés à la main, nous n'avons plus de problèmes avec Visual Studio Mélange tout. P>
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: P>
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. P>
Notez que MPC n'est pas le seul outil à cet effet. D'autres existent, tels que CMAKE . P>
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). p>
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. P>
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>
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. p>
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. P>
fissh p>
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 ...