SVN comment résoudre de nouveaux conflits d'arborescence lorsque le fichier est ajouté sur deux branches

lors de la fusion de quelques branches (en utilisant SVN 1.6.1) où un fichier a été ajouté sur les deux branches (et ensuite travaillé sur ces branches séparées) je reçois un des nouveaux conflits d'arbre:

      C foo.txt
  >   local obstruction, incoming add upon merge

j'ai besoin des changements des deux branches, mais le conflit de l'arbre ne me donne pas l'habitude .travailler. ,fusion-gauche et .fusion-droit fichiers, ce qui est compréhensible en raison de la nature du conflit. Il y a un certain nombre de ces conflits, et ceux où suppression du même fichier a eu lieu sur chaque branche, mais ils sont simples à résoudre.

comment résoudre ce problème? LE LIVRE DE SVN redbean (pour 1.6) ne couvre pas cette situation.

94
demandé sur DEfusion 2009-04-20 14:49:25

4 réponses

, Comme l'a mentionné dans une version plus ancienne (2009) de la "Arbre de Conflit" design document:

XFAIL conflit de fusion et d'ajouter plus de version de fichier

ce test fait une fusion qui apporte un ajout de fichier sans histoire sur un existant versionné fichier .

Il doit s'agir d'un conflit d'arbre dans le dossier de la variété local obstruction, incoming add upon merge . Fixe les attentes en r35341.

(C'est aussi appelé" Les Jumeaux Maléfiques "dans ClearCase d'ailleurs):

un fichier est créé deux fois (ici "ajouté" deux fois) dans deux branches différentes, créant deux histoires différentes pour deux éléments différents, mais avec le même nom.

la solution théorique est de fusionner manuellement ces fichiers (avec un outil de diff externe) dans la branche de destination" B2 ".

Si vous travaillez encore sur la branche source, le scénario idéal serait de supprimer ce fichier de la branche source B1 , de fusionner de nouveau de B2 à B1 afin de rendre ce fichier visible sur B1 (vous travaillerez alors sur le même élément).

Si une fusion de retour n'est pas possible parce que les fusions se produit seulement de B1 à B2 , alors une fusion manuelle sera nécessaire pour chaque B1->B2 fusions.

39
répondu VonC 2011-07-15 17:16:06

j'ai trouvé un poteau suggérant une solution pour ce poteau . Il est sur le point de lancer:

svn resolve --accept working <YourPath>

qui revendiquera les fichiers de la version locale comme OK.

Vous pouvez l'Exécuter pour un seul fichier ou pour des catalogues de projets complets.

159
répondu lukmdo 2014-06-12 11:06:00

et si les changements entrants sont ceux que vous voulez? Je ne peux pas exécuter svn resolve -- accepter le leur-full

svn resolve --accepter de base

9
répondu Gabriel F. T. Gomes 2011-02-16 09:11:14

j'ai juste réussi à me caler assez complètement en essayant de suivre les conseils de user619330 ci-dessus. La situation était la suivante: (1): j'avais ajouté des fichiers en travaillant sur ma branche initiale, branch1; (2) j'ai créé une nouvelle branche, branch2 pour un développement ultérieur, la branchant à partir du tronc et la fusionnant ensuite dans mes modifications de branch1 (3) un collègue avait copié mes mods de branch1 à sa propre branche, ajouté d'autres mods, et puis fusionné à nouveau dans le tronc; (4) je voulais maintenant fusionner la dernière change du tronc en ma branche de travail actuelle, branch2. C'est avec svn 1.6.17.

la fusion avait des conflits d'arborescences avec les nouveaux fichiers, et je voulais la nouvelle version à partir du tronc où ils différaient, donc à partir d'une copie propre de branch2, j'ai fait une suppression svn des fichiers en conflit, j'ai engagé ces changements de branch2 (créant ainsi une version temporaire de branch2 sans les fichiers en question), et j'ai ensuite fait ma Fusion à partir du tronc. J'ai fait cela parce que je voulais que l'histoire faire correspondre la version du tronc de sorte que je n'aurais plus de problèmes plus tard en essayant de fusionner de nouveau avec le tronc. La fusion s'est très bien passée, j'ai eu la version trunk des fichiers, svn st montre tout ok, et puis j'ai frappé plus de conflits d'arborescences en essayant de propager les modifications, entre la suppression que j'avais faite plus tôt et l'ajout de la fusion. J'ai fait une résolution svn des conflits en faveur de ma copie de travail (qui avait maintenant la version trunk des fichiers), et je l'ai fait propager. Tout devrait être bon, non?

Eh bien, non. Une mise à jour d'une autre copie de branch2 a abouti à l'ancienne version des fichiers (pré-fusion du tronc). Donc maintenant j'ai deux copies de branch2 différentes, soi-disant mises à jour vers la même version, avec deux versions différentes des fichiers, et toutes les deux insistant sur le fait qu'elles sont entièrement à jour! La vérification d'une copie propre de branch2 a abouti à l'ancienne version (pré-trunk) des fichiers. Je les mets à jour manuellement dans la version trunk et j'engage les modifications, je retourne à mon premier travail Copiez (À partir de laquelle j'avais soumis les modifications du tronc à l'origine), essayez de le mettre à jour, et obtenez maintenant une erreur de somme de contrôle sur les fichiers en question. Souffler le répertoire en question loin, obtenir une nouvelle version via la mise à jour, et enfin j'ai ce qui devrait être une bonne version de branch2 avec les changements de tronc. J'ai de l'espoir. Avertissement développeur.

1
répondu dewtell 2011-08-17 22:55:18