Question

Nous envisageons de passer d'un système de contrôle de version de type extraction/édition/archivage à Subversion, et lors de l'évaluation, nous avons découvert que lorsque vous effectuez une action Mettre à jour dans TortoiseSVN (et probablement dans n'importe quel client Subversion ?), si les modifications apportées au référentiel qui doivent être appliquées aux fichiers que vous avez modifiés ne provoquent aucun conflit, elles seront automatiquement/silencieusement fusionnées.

Cela nous fait un peu peur, car il est possible que cette fusion, même si elle ne produit aucune erreur de compilation, puisse au moins introduire des erreurs logiques qui pourraient ne pas être facilement détectées.

Exemple très simple :Je travaille dans une méthode C# en modifiant une certaine logique dans la dernière partie de la méthode, et quelqu'un d'autre modifie la valeur à laquelle une variable est initialisée au début de la méthode.Le changement de l'autre personne ne se trouve pas dans les lignes de code sur lesquelles je travaille, donc il n'y aura pas de conflit ;mais il est possible de modifier radicalement le résultat de la méthode.

Ce que nous espérions, c'est que si une fusion devait se produire, alors les deux fichiers seraient affichés et au moins une simple option d'acceptation/rejet de modification serait présentée, de sorte qu'au moins nous soyons conscients que quelque chose a changé et ont la possibilité de voir si cela a un impact sur notre code.

Existe-t-il un moyen de faire cela avec Subversion/TortoiseSVN ?Ou sommes-nous trop coincés dans nos méthodes de travail actuelles et devrions-nous simplement les laisser faire...

Était-ce utile?

La solution

La meilleure façon de contourner ce problème est d’éduquer les développeurs.Après avoir effectué une mise à jour dans TortoiseSVN, il vous montre une liste des fichiers concernés.Un simple double-clic sur chaque fichier vous donnera la différence entre eux.Vous pourrez ensuite voir ce qui a changé entre votre version et la dernière version du référentiel.

Autres conseils

C'est dans la FAQ :Comment puis-je empêcher Subversion d'effectuer des fusions automatiques ?

  1. Dans TortoiseSVN->Paramètres->Général->Fichier de configuration Subversion, cliquez sur le bouton Modifier.
  2. Changer la [helpers] section en ajoutant

      diff-cmd = "C:\\false.bat"
    

    (notez la double barre oblique inverse)

  3. Créez le fichier C:\false.bat qui contient deux lignes

      @type %9
      @exit 1
    

Voici une astuce pour TortoiseSVN :

Comment désactiver la « fusion automatique » dans Subversion

L'astuce pour svn.exe consiste à définir l'outil de comparaison externe svn sur un programme qui échouera constamment.

svn --diff-cmd=/bin/false

Si le programme de comparaison externe échoue, svn conclut que le conflit est insoluble et ne le fusionnera pas.

Je vous suggère d'apprendre à travailler avec le modèle naturel de Subversion si possible.Dans la pratique, nous constatons que les conflits sont rares et que le type de conflit logique dont vous parlez est presque inexistant (je ne me souviens pas d'un cas au cours des 4 dernières années dans notre référentiel).

Les membres de l'équipe doivent enregistrer les modifications à une échelle aussi petite que possible (tout en conservant l'exactitude) plutôt que de regrouper une journée entière de travail pour les enregistrer une seule fois.Cela réduira la possibilité de piétiner le travail de quelqu'un d'autre.

Si vous êtes préoccupé par un changement particulier que vous effectuez, Subversion fournit un verrouillage mécanisme pour vous permettre d’empêcher d’autres modifications du fichier.Voir le livre rouge chapitres sur verrouillage.

C'est pourquoi les tests (unitaires) automatisés constituent un élément fondamental du développement de logiciels distribués.Dans l'exemple que vous donnez, au moins un test unitaire devrait échouer lors de la mise à jour svn et vous alerter de l'erreur.

Rappelez-vous ce qu'est Subversion :un système de contrôle de version, pas un outil de fusion de code parfaitement fonctionnel.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top