Lorsque je fais une fusion TortoiseSVN, elle inclut un ensemble de répertoires et certains fichiers dans les fichiers modifiés, même s’il n’ya pas de modifications réelles.
Cela change la propriété svn:mergeinfo
.
Y a-t-il une raison pour laquelle ces propriétés définies sur le répertoire/les fichiers sont nécessaires? Est-il possible d'éviter les modifications apportées à svn:mergeinfo
?
Habituellement, je ne fais que rétablir les éléments, puis valider, mais cela fait perdre du temps supplémentaire.
Cela se produit très probablement parce que la propriété svn: mergeinfo de ces fichiers et répertoires a été définie à partir d'une fusion précédente. Je ne pense pas que ce soit généralement une bonne idée de fusionner des fichiers ou des répertoires individuels de manière à ce que les informations de fusion soient écrites dans des fichiers individuels. Vous devez prendre l'habitude de fusionner au plus haut niveau possible pour votre flux de travail, de sorte que la propriété mergeinfo ne soit définie que sur des répertoires structurels, tels que/trunk ou /branches/1.0.
Toutefois, si vous vous retrouvez avec des propriétés mergeinfo sur des fichiers et des dossiers individuels, vous pouvez procéder de deux manières: la première consiste simplement à supprimer la propriété svn: mergeinfo des fichiers et des répertoires en question. Je ne suis pas sûr que ce soit recommandé à moins que vous ne sachiez vraiment ce que vous faites et quels en sont les effets. Lisez la documentation avant de faire cela!
La deuxième chose que vous pouvez faire est de valider la propriété, telle que modifiée par SVN. Si vous faites confiance au logiciel, faites-le probablement.
Cela étant dit, je travaille avec mes coéquipières pour adopter les bonnes habitudes afin que nous n'ayons plus cet ennui.
Cela devrait être corrigé dans SVN 1.7. De les notes de version }:
Les fusions n'enregistrent plus les informations de fusion (décrivant la fusion) sur les sous-arbres (qui ont leur propre information de fusion explicite), si le sous-arbre n'a pas été affecté par la fusion. Cela devrait considérablement réduire le nombre de modifications de propriétés
svn:mergeinfo
non essentielles pour les utilisateurs qui possèdent un grand nombre de sous-arbres avec des informations de fusion explicites.
En effet, une fois qu'un fichier/dossier contient des informations de fusion explicites, chaque fusion ultérieure avec la branche mettra à jour ces informations de fusion, même si le fichier/dossier .__ n'est pas lié. C'est agaçant car cela introduit de plus en plus de fouillis dans la liste des modifications pour chaque fusion.
Pour éviter cela, ne fusionnez que dans le dossier "racine" de la branche, par exemple "/ Branches/maintenance2.x". Aucun des fichiers ou des dossiers ci-dessous "/ Branches/maintenance2.x" ne devrait alors recevoir les informations de fusion. Suivez les conseils de fusion dans le livre SVN .
Malheureusement, même si vous ne fusionnez qu'au niveau du dossier "racine" de la branche, les propriétés Empty svn:mergeinfo
peuvent toujours apparaître sur des fichiers individuels et des dossiers Lorsqu’ils sont copiés, pour indiquer qu’ils n’ont pas reçu le même fusion que leurs frères et soeurs.
Il est probablement prudent de supprimer les informations de fusion superflues de sous-arborescence. Une façon de procéder consiste à supprimer de manière récursive la propriété svn:mergeinfo
sur chaque fichier et dossier de la racine de votre projet. (Mais conservez les informations de fusion sur le dossier racine lui-même!)
Vous pouvez également effectuer une mise à niveau vers Subversion 1.6 . J'ai vérifié qu'il résout ce problème. Il semble même supprimer pour vous les informations de fusion superflues ajoutées par les versions précédentes.
À en juger par les commentaires, il existe encore des cas dans SVN 1.6 où des informations de fusion de sous-arborescence superflues apparaissent. Mais je n'ai pas été capable de reproduire cela.
Si vous effectuez vos fusions avec l'option --ignore-ascestry, les propriétés d'informations de fusion ne seront pas créées à la première place.
svn merge --ignore-ancestry -c 1234 svn://sourcecontrol .
Si vous cochez Ignorer l'ascendance , cela ne créera pas svn mergeinfo dans les dossiers. Si vous avez déjà les informations svn merge, il suffit de les rétablir et de refaire la fusion en cochant la case Ignorer l'ascendance.
svn: mergeinfo est la propriété que Subversion utilise pour suivre l’historique de la fusion . Je le laisserais juste faire ce qu'il doit faire ... vous aurez peut-être besoin de suivre l'historique de fusion et de découvrir que cela ne fonctionne pas parce que vous n'avez pas validé ces propriétés.
J'ajouterais qu'au moins une partie de ce bogue a été corrigée dans Subversion 1.5.5. Depuis le fichier 1.5.5 CHANGES :
do not create mergeinfo for wc-wc moves or copies (r34184, -585)
C'est-à-dire qu'il existait, avant la version 1.5, un bogue qui créait des entrées d'informations de fusion qu'il n'utilisait pas et qu'il était superflu. Il s'agit probablement de ce que l'interrogateur initial utilisait s'il disposait de nombreuses propriétés svn:mergeinfo
.
La commande donnée dans la question de débordement de pile supprime les propriétés inutiles de svn: mergeinfo supprimera les informations de fusion supplémentaires.
Bonne question et réponse! Nous avons eu ce problème récemment, parce que nous essayons de contourner les limites de notre système de construction automatisé. Notre système de construction incrémente automatiquement les fichiers .bdsproj et certains des fichiers .dpr/.dpk avec les informations de version et de chemin d'accès.
Je veux changer cela ... mais maintenant, si vous voulez fusionner une branche avec une autre, vous obtenez la poignée de fichiers que vous avez modifiés, puis 1 000 fichiers modifiés par la machine de génération. Nous avons donc effectué des fusions "ciblées", parfois un fichier à la fois. Particulièrement avec les fichiers .dpr ou .bdsproj qui contiennent des modifications légitimes (telles que l’inclusion d’une unité supplémentaire) .
Merci débordement de pile!
Nous l'avons supprimé récursivement dans notre projet car à peu près tous les fichiers avaient cette information, ce qui rendait la fusion très pénible (si un seul fichier avait été modifié, tous les fichiers devaient être fusionnés). À partir de maintenant, nous ne ferons que fondre sur la racine, ce qui devrait éviter cette situation à l'avenir.
Cela ne nous a pas posé de problèmes jusqu'à présent. La journalisation est toujours disponible sur les fichiers et semble être la même (mais faites-le à vos risques et périls quand même!).
Oh, nous l'avons fait sur notre coffre, juste avant de créer une nouvelle branche. De cette façon, nous pouvons partir d'une table rase.
Nous avions également ce problème dans mon équipe et cela rendait le processus de fusion un peu déroutant . Après avoir lu ceci, j'ai essayé de supprimer la propriété svn: mergeinfo d'un certain nombre de fichiers et, après quelques tests supplémentaires, elle ressemblait à cela. résolu le problème.