141 votes

Supprimer les propriétés svn:mergeinfo inutiles

Quand je fusionne des choses dans mon référentiel, Subversion veut ajouter/changer beaucoup d'informations. svn:mergeinfo à des fichiers qui n'ont rien à voir avec les éléments que je veux fusionner.

Des questions sur ce comportement ont déjà été posées ici sur Stack Overflow :

D'après ce que j'ai compris des sujets mentionnés ci-dessus, il semble que de nombreux fichiers de mon référentiel aient une valeur explicite. svn:mergeinfo des propriétés sur eux, alors qu'ils ne 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 facilement supprimer 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 facile de supprimer ces propriétés inutiles svn:mergeinfo des propriétés ?

P.S. Je suis pas recherche le code de l'API SVN C++.

145voto

Vincent Points 1428

Voici une autre façon de supprimer toutes les propriétés svn:mergeinfo des sous-arbres, mais pas au niveau du dossier racine (ceci est nécessaire pour que le branchement fonctionne correctement).

Depuis la racine du projet, faites :

svn propdel svn:mergeinfo -R
svn revert .
svn ci -m "Removed mergeinfo"

60 votes

Ou, simplement ne pas le faire sur le répertoire racine "svn propdel -R svn:mergeinfo ./*"

3 votes

"svn propdel -R svn:mergeinfo ./* ./.[^.]*" si vous avez aussi des fichiers cachés "dot" / *ix, ce qui n'est probablement pas un problème pour un utilisateur de Windows selon la question.

3 votes

Supprimer la sortie l'accélère : "svn propdel svn:mergeinfo -R >nul" (ou >/dev/null sous Linux)

15voto

Kelvin Points 450

Voici un moyen de supprimer toutes les propriétés svn:mergeinfo des sous-arbres. Exécutez-la à l'intérieur de 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 seule ligne pour faciliter le copier/coller :

svn propget svn:mergeinfo --depth=infinity | grep -v "^/" | grep -v "^\." | cut -d- -f1 | xargs svn propdel svn:mergeinfo

Pour avoir un aperçu des fichiers que cela affectera avant de l'exécuter, changez le dernier "propdel" en "propget" ou supprimez complètement le dernier tube xargs.

2 votes

Fonctionne avec les traits d'union dans les fichiers : svn propget -R svn:mergeinfo | grep -v "^/" | grep -v "^ \. " | cut "-d " -f1 | xargs svn propdel svn:mergeinfo

12voto

VonC Points 414372

Comme mentionné dans ce fil :

  • La plupart des mergeinfo vides ("blank") peuvent être causés par des copies/déplacements de working copy à working copy où l'élément source n'a pas de mergeinfo explicite. L'utilisation de propdel peut être la solution, à moins que vous n'utilisiez un SVN 1.6 : depuis la version 1.5.5, ces copies WC-to-WC ne créent plus de mergeinfo vide sur la destination.
  • une opération de restructuration svn move (rename) antérieure peut aussi propager les mergeinfo, au lieu de les laisser dans le répertoire racine
  • il y a un problème potentiel de mémoire, suivi par cas 3393 qui sera corrigé dans une prochaine version 1.6.2 et rétroporté dans la 1.5

6voto

Yves Martin Points 6294

Comme je n'ai pas confiance en l'aveugle svn:merge-info J'ai mis en place 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'information de fusion non-Root. Après des vérifications et des contrôles humains supplémentaires, les changements sur la copie de travail peuvent être validés.

C'est ici : svn-clean-mergeinfo

N'hésitez pas à signaler tout problème lié à son utilisation pour qu'il soit amélioré.

Subversion 1.10 introduit un nouvel outil dédié à cette tâche : svn-mergeinfo-normalizer

2 votes

Cet outil est idéal pour consolider les propriétés d'information de fusion, comme celles qui sont créées par les fusions partielles de sous-répertoires que plusieurs développeurs moins que parfaitement coordonnés dans une grande équipe peuvent créer. L'outil semble avoir un problème avec les fichiers qui n'existent pas dans toutes les branches, j'ai des propriétés de fusion restantes sur des fichiers indiquant des révisions sur des branches dans lesquelles le fichier n'a jamais existé.

0 votes

Je reconnais que ce n'est pas parfait... c'est pourquoi les "vérifications et contrôles humains" sont toujours nécessaires. Dans votre cas, si vous avez identifié des révisions non pertinentes dans les propriétés merge-info, vous pouvez supprimer ces révisions ou l'ensemble de la propriété svn:merge-info sur ces fichiers avant de commiter. Veuillez utiliser github pour demander des améliorations.

2voto

Chase Seibert Points 7609

Si vous êtes sûr de vouloir supprimer en masse les propriétés de mergeinfo, vous pouvez utiliser le BASH script suivant.

FILES=`svn status |grep "^ M      " |sed s/" M      "// |tr '\n', ' '`
svn revert $FILES

Il obtient une liste de fichiers modifiés, la filtre pour ne retenir que les changements de type mergeinfo, supprime tout sauf le chemin d'accès réel au fichier, convertit les chemins d'accès d'une ligne en une liste délimitée par des espaces, et les appels de retour sur cette liste.

2 votes

Merci, mais comme vous avez pu le savoir en mentionnant TortoiseSVN, je suis un utilisateur Windows et je n'utilise pas le shell Bash :-)

0 votes

La même chose devrait être possible sous DOS, même si elle n'est probablement pas aussi concise.

1 votes

Est-ce que cela ne rétablit pas seulement les fichiers avec un mergeinfo modifié dans le répertoire de travail actuel ? Si c'est le cas, cela ne résout pas le problème : le mergeinfo explicite existant. Pour cela, vous devez utiliser propdel.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X