2010-08-06 24 views
3

Notre code est en SVN. Nous développons en utilisant Visual Studio et le plugin AnkhSVN. Ayant utilisé VSS avant SVN j'étais habitué à l'idée de verrouiller les fichiers afin que les autres utilisateurs ne les éditent pas (en fait, je pensais que c'était le point principal du contrôle de source, pour éviter les pertes de données de ces conflits).Que devrais-je vraiment * faire * dans AnkhSVN lorsque deux personnes éditent le même fichier sous SVN

On m'a dit que cela arrive rarement et que les cas où vous ne pouvez pas travailler parce qu'un autre dev vous bloque sont plus fréquents (ce qui ressemble à un principe qui pourrait s'appliquer uniquement à un certain sous-projet). Mais de toute façon, SVN est meilleur et nous l'utilisons.

Donc, quand je modifie un fichier, que je le vérifie et que je découvre que l'autre utilisateur l'a édité aussi, que dois-je faire en réalité?

Sûrement il y a un meilleur moyen que d'enregistrer une copie de mon fichier, annuler les changements, mettre à jour à partir du serveur, puis fusionner mes modifications avec winmerge? Quand je fais un clic droit sur le fichier et que je clique sur 'fusionner', on me dit que je devrais mettre à jour en premier, donc ce n'est évidemment pas ce dont j'ai besoin.

.

Mise à jour: réponse partielle
OK, on ​​dirait que je viens de frapper la mise à jour, puis SVN fusionne les modifications non conflictuelles automatiquement, et devrait laisser AnkhSVN avertir des modifications en conflit pour permettre une sorte de résolution. Est-ce que quelqu'un sait comment cela fonctionne dans AnkhSVN - ce que je ferais réellement?

(sinon je vais essayer moi-même, accepter la réponse actuelle et mettre à jour cette question avec la seconde moitié pour la postérité).

Répondre

6

En fait, c'est exactement ce dont vous avez besoin.

Modifier: Clarification, ce que vous devez faire est de simplement frapper cette mise à jour. Vous n'avez pas besoin de faire une copie distincte, de revenir en arrière, etc. La mise à jour à partir du référentiel fusionnera ces modifications avec les vôtres. Lorsque vous faites la mise à jour, où vous avez des modifications locales à un fichier qui a également été modifié dans le référentiel, SVN fusionnera le fichier dans le référentiel avec votre fichier local, en conservant les deux ensembles de modifications.

En effet, il devrait faire ce que vous feriez avec Winmerge automatiquement.

Si les modifications sont conflictuelles, typiquement qu'elles se produisent dans les mêmes lignes, il y aura un conflit de fusion, qui doit être résolu. Ne sachant pas AnkhSvn, je ne sais pas ce qu'il fera dans ce cas, mais il devrait avoir des moyens de réparer les choses. Habituellement, cela implique de regarder plus de 3 fichiers (votre fichier local, le fichier du référentiel, et le résultat d'une fusion réussie) où vous choisissez chaque partie que vous voulez conserver des deux versions modifiées du fichier. Une fois que vous avez mis à jour votre copie locale, fusionné et corrigé les conflits, vous validez comme d'habitude.

+2

D'après mon expérience, certains fichiers sont susceptibles de fusionner conflits, comme les scripts sql ou les fichiers de chaînes de localisation de langue. Dans ces fichiers, nous définissons la propriété svn: needs-lock subversion. Cela forcera les développeurs à verrouiller exclusivement le fichier avant de le modifier, et personne ne pourra le modifier entre temps. De Ankh svn vous devriez être capable de faire un clic droit sur le fichier et modifier les propriétés subversion. –

+0

Oui, vous avez raison, il y a en effet des fichiers qui sont susceptibles de fusionner des conflits pour des modifications mineures. Par exemple, les fichiers de concepteurs de formulaires dans .NET/C#, où une modification mineure peut réorganiser beaucoup de code. –

+1

Je sais ce que vous voulez dire, mais je pense qu'il devrait être plus évident de votre réponse qu'il n'est pas nécessaire d'enregistrer manuellement vos modifications ailleurs, de les annuler, de les mettre à jour et de les fusionner manuellement. Juste en appuyant sur la mise à jour est tout ce qui est nécessaire. –

0

Ce n'est pas une réponse directe à votre question, mais je recommanderais d'utiliser SVN-Monitor en plus de AnkhSVN ou tout autre client Subversion comme TortoiseSVN. Avec elle, vous pouvez regarder votre dépôt et serez informé par les changements dans votre dépôt.

Vous pouvez donc voir ce que les autres devs ont fait dans le dépôt et voir si votre commit va entrer en conflit avec d'autres checkins ou si vous pouvez mettre à jour votre copie locale sans aucun effet/conflit