Lorsque je fusionne des éléments de mon référentiel, Subversion souhaite ajouter/modifier beaucoup de svn:mergeinfo
propriétés de fichiers totalement indépendants des éléments que je souhaite fusionner.
Des questions sur ce comportement ont déjà été posées sur Stack Overflow:
D'après ce que j'ai compris des sujets mentionnés ci-dessus, beaucoup de fichiers de mon référentiel ont explicitement svn:mergeinfo
propriétés sur eux, alors qu’ils ne le devraient pas. Le conseil est de réduire le montant et de ne placer ces propriétés que sur les fichiers/dossiers pertinents.
Alors maintenant, ma question: comment puis-je facilement supprimer ces propriétés inutiles? J'utilise TortoiseSVN, mais je suis réticent à vérifier/corriger manuellement des centaines de fichiers. Existe-t-il un moyen plus simple de supprimer ces éléments inutiles svn:mergeinfo
Propriétés?
P.S. Je ( ne recherche pas le code de l'API C++ SVN.
Voici un autre moyen de supprimer toutes les propriétés svn: mergeinfo du sous-arbre, mais pas au niveau du dossier racine (nécessaire pour que la création de branches fonctionne correctement).
À la racine du projet, faites:
svn propdel svn:mergeinfo -R
svn revert .
svn ci -m "Removed mergeinfo"
Voici un moyen de supprimer toutes les propriétés de la sous-arborescence svn: mergeinfo. Exécutez-le à la racine de votre référentiel:
svn propget svn:mergeinfo --depth=infinity
| grep -v "^/"
| grep -v "^\."
| cut -d- -f1
| xargs svn propdel svn:mergeinfo
Tout en une ligne pour un copier/coller facile:
svn propget svn:mergeinfo --depth=infinity | grep -v "^/" | grep -v "^\." | cut -d- -f1 | xargs svn propdel svn:mergeinfo
Pour prévisualiser les fichiers que cela affectera avant de l’exécuter, modifiez le dernier "propdel" en "propget" ou supprimez complètement le dernier tube xargs.
Comme mentionné dans ce fil :
Comme je ne suis pas confiant avec aveugle svn:merge-info
_ suppression de propriété, j'ai mis en place un outil permettant d'analyser la situation actuelle sur une copie de travail et de supprimer autant que possible les révisions de fusion des propriétés de fusion non-racine. Après des vérifications et contrôles humains supplémentaires, les modifications de la copie de travail peuvent être validées.
La voici: svn-clean-mergeinfo
N'hésitez pas à signaler tout problème concernant son utilisation afin de l'améliorer.
Subversion 1.10 introduit un nouvel outil dédié à cette tâche: svn-mergeinfo-normalizer
Je sais que cela fait longtemps, mais j'ai rencontré un problème similaire. J'utilise TortoiseSVN 1.6.7. Il se trouve que la propriété se trouve à la racine de ma copie de travail. Lorsque j'ai visualisé les propriétés à la racine et cliqué sur Supprimer sur svn: mergeinfo, il m'a demandé si je souhaitais le supprimer de manière récursive. Cela s'est débarrassé de tous mes cockups svn: mergeinfo.
Plutôt que de supprimer aveuglément les propriétés de mergeinfo, il est également possible de terminer les fusions "manquantes".
Copiez la propriété mergeinfo à partir du dossier racine, puis effectuez une fusion sur le dossier enfant pour obtenir le chemin relatif approprié et la même liste de révision. (Vous pouvez, mais n'avez pas besoin de, lister uniquement les différences entre cette liste et celle déjà présente dans le dossier enfant.)
Normalement, cette fusion ne devrait modifier que les propriétés de l'information de fusion, pas les fichiers réels. (Si cela finit par changer des fichiers, alors l'une des fusions précédentes ne doit être qu'une fusion partielle, ce qui peut vous causer des problèmes de toute façon.)
Cela devrait finir par supprimer la propriété mergeinfo pour vous, une fois que vous avez obtenu que les deux correspondent exactement. Vous devrez peut-être aussi faire l'inverse: fusionnez à la racine toutes les révisions de fusion présentes uniquement dans le dossier enfant (encore une fois, vous pouvez simplement coller la liste complète et laisser SVN régler les différences à votre place).
Si vous êtes certain de vouloir supprimer en masse les propriétés mergeinfo, vous pouvez utiliser le script BASH suivant.
FILES=`svn status |grep "^ M " |sed s/" M "// |tr '\n', ' '`
svn revert $FILES
Il obtient une liste des fichiers modifiés, le filtre pour fusionner uniquement les modifications de fusion, supprime tout sauf le chemin de fichier réel, convertit les chemins une par ligne en une liste délimitée par des espaces et les appels y reviennent.
Pour effectuer des modifications dans une structure de répertoires, il s’agirait (recherche non-DOS uniquement):
find . -path "*/.svn" -Prune -or -exec svn propdel svn:mergeinfo '{}' \;
En exécutant un client 1.6.12 connecté à un serveur 1.5, j'ai un problème similaire; Là is un sous-répertoire du projet qui a besoin de son propre svn: mergeinfo, mais avoir 121 entrées de ce type (y compris 5 répertoires sous ./var avec "svn: ignore *") semble quelque peu inapproprié. Ainsi, il serait bien d’avoir un script (par exemple, Python) capable de supprimer les informations de fusion manifestement superflues et de faire état d’autres différences ...