2010-04-16 11 views
1

Si vous avez effectué une fusion, vous pouvez constater, avant de valider les modifications, que vous ne souhaitez pas accepter les modifications fusionnées dans un des fichiers affectés. Alors vous faites .: par exempleSvn: annule les modifications de contenu de fichier sans annuler les informations de fusion associées?

$ svn revert foo.c

Cependant, cela semble également de revenir le mergeinfo lié à ce fichier. Ainsi, lorsque vous effectuez une fusion ultérieure, elle fusionnera exactement dans les mêmes changements.

Plutôt que de nous revenions on pourrait faire:

$ svn cat foo.c> foo.c

Mais cela ne semble pas la bonne façon de faire les choses? Y a-t-il quelque chose qui indique plus clairement ce que j'essaie d'accomplir, c'est-à-dire de dire «considère la fusion faite pour ce fichier mais ne change pas son contenu»?

+0

Je peux me tromper à ce sujet mais je pense que le seul cas où la restauration d'un fichier retourne aussi son * mergeinfo * est lorsque la propriété * mergeinfo * est définie sur le fichier lui-même. Si vous effectuez régulièrement des fusions sur le répertoire racine de la branche, les fichiers eux-mêmes n'auront pas de propriété * mergeinfo *. –

+0

Je prends soin de ne fusionner que des répertoires plutôt que des fichiers (il n'est pas toujours possible de fusionner la racine), et j'ai aussi ce problème. Subversion 1.5 et/ou 1.6 (je ne sais pas exactement quand le serveur a été mis à jour à 1.6) a ajouté beaucoup d'attributs 'mergeinfo' automatiquement, à la fois pour les fichiers et répertoires (y compris des choses comme' var' et 'log', où tout est 'svn: ignore'd et aucun changement significatif n'est jamais engagé ...). La pitié est, vous devez vérifier chaque fichier afin de savoir comment 'svn revert' fonctionnerait. Ainsi, 'svn cat' pourrait être la meilleure solution ... – Tobias

Répondre

1

Pour empêcher la fusion d'une révision, exécutez la commande merge avec le paramètre --record-only.

+0

Dans ma situation, je fusionne habituellement un grand arbre de fichiers. Je veux faire une fusion _real_ et accepter la plupart des changements fusionnés. Je parle juste de la situation où, en examinant la fusion, je décide que, parmi de nombreux fichiers avec des changements fusionnés, il y a un ou deux fichiers dans lesquels je ne veux pas accepter les changements, mais je veux quand même fusionner être considéré comme fait pour ces fichiers ainsi que tous les autres une fois que j'ai terminé le commit. Je pourrais inverser les changements pour ces un ou deux dossiers et puis fusionner avec --record-seulement pour ces dossiers spécifiques mais ceci semble long winded? –

+0

Ensuite, n'utilisez pas la commande revert mais annulez les modifications dans un outil de comparaison visuelle. – Stefan

+0

Pour ceux qui ont une boîte Linux virtuelle, où le client de ligne de commande est utilisé, et l'outil visuel étant TortoiseSVN via un lecteur samba, cela semble assez peu pratique; la solution 'svn cat' est meilleure car elle peut être scriptée. – Tobias