Lorsque je fusionne des éléments dans mon référentiel, Subversion souhaite ajouter / modifier de nombreuses svn:mergeinfo
propriétés à des fichiers qui ne sont absolument pas liés aux éléments que je souhaite fusionner.
Des questions sur ce comportement ont déjà été posées ici sur Stack Overflow:
- Propriétés SVN Mergeinfo sur des chemins autres que la racine de la copie de travail
- Existe-t-il un moyen de désactiver TortoiseSVN en utilisant svn: mergeinfo?
D'après ce que je comprends des sujets mentionnés ci-dessus, il semble que beaucoup de fichiers de mon référentiel ont des svn:mergeinfo
propriétés explicites , alors qu'ils ne le devraient pas. Le conseil est de réduire la quantité et de ne mettre ces propriétés que sur les fichiers / dossiers pertinents.
Alors maintenant, ma question: comment puis-je supprimer facilement ces propriétés inutiles? J'utilise TortoiseSVN, mais je suis réticent à vérifier / réparer manuellement des centaines de fichiers. Existe-t-il un moyen plus simple de supprimer ces svn:mergeinfo
propriétés inutiles ?
PS Je ne cherche pas de code API C ++ SVN.
la source
Voici un moyen de supprimer toutes les propriétés svn: mergeinfo de la sous-arborescence. Exécutez-le à la racine de votre référentiel:
Tout en une seule ligne pour un copier / coller facile:
Pour prévisualiser quels fichiers cela affectera avant de l'exécuter, changez le dernier «propdel» en «propget» ou supprimez complètement le dernier tube xargs.
la source
Comme mentionné dans ce fil :
la source
Comme je ne suis pas sûr de la
svn:merge-info
suppression des propriétés aveugles , j'ai implémenté un outil pour analyser la situation actuelle sur une copie de travail et supprimer autant de révisions de fusion que possible des propriétés d'informations de fusion non root. Après des vérifications et des contrôles humains supplémentaires, les modifications sur la copie de travail peuvent être validées.Le voici: svn-clean-mergeinfo
N'hésitez pas à signaler tout problème concernant son utilisation pour l'améliorer.
Subversion 1.10 introduit un nouvel outil dédié à cette tâche:
svn-mergeinfo-normalizer
la source
Je sais que cela fait un moment, 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 consulté les propriétés à la racine et cliqué sur Supprimer sur svn: mergeinfo, il m'a demandé si je voulais le supprimer de manière récursive. Cela m'a débarrassé de tous mes cockups svn: mergeinfo.
la source
Si vous êtes sûr de vouloir supprimer en masse les propriétés de mergeinfo, vous pouvez utiliser le script BASH suivant.
Il obtient une liste des fichiers modifiés, la filtre pour que les informations de fusion uniquement changent, supprime tout sauf le chemin du fichier réel, convertit les chemins un par ligne en une liste délimitée par des espaces, et les appels reviennent sur cette liste.
la source
--xml
indicateur et un analyseur XML; tout le reste peut changer entre les versions, car la compatibilité ascendante sur le format de sortie textuelle n'est pas garantie.Plutôt que de simplement 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 le chemin relatif approprié et la même liste de révisions. (Vous pouvez, mais ce n'est pas nécessaire, lister uniquement les différences entre cette liste et celle déjà présente dans le dossier enfant.)
Normalement, cette fusion ne devrait finir par modifier que les propriétés de mergeinfo, pas les fichiers réels. (Si cela finit par modifier les fichiers, alors l'une des fusions précédentes ne doit être qu'une fusion partielle, ce qui peut vous avoir de toute façon posé des problèmes.)
Cela devrait finir par supprimer la propriété mergeinfo pour vous, une fois que vous avez obtenu les deux pour correspondre exactement. Vous devrez peut-être également faire l'inverse: fusionner à la racine toutes les révisions de fusion présentes uniquement sur le dossier enfant (encore une fois, vous pouvez simplement coller la liste complète et laisser SVN trier les différences pour vous).
la source
Pour faire des changements dans une structure de répertoires, ce serait ("find" non-DOS uniquement):
En exécutant un client 1.6.12 connecté à un serveur 1.5, j'ai un problème similaire; Là y a un sous-répertoire dans le projet qui a besoin de son propre svn: mergeinfo, mais avoir 121 entrées de ce type (dont 5 répertoires ci-dessous ./var avec "svn: ignore *") semble quelque peu inapproprié. Ainsi, ce serait bien d'avoir un script (par exemple Python) capable de supprimer les informations de fusion manifestement superflues et de parler d'autres différences ...
la source