J'avais une branche caractéristique de mon tronc et je fusionnais périodiquement les changements de mon tronc dans ma branche et tout fonctionnait bien. Aujourd'hui, je suis allé fusionner la branche dans le tronc et tous les fichiers qui ont été ajoutés à mon tronc après la création de ma branche ont été signalés comme un "conflit d'arborescence". Existe-t-il un moyen d'éviter cela à l'avenir?
Je ne pense pas que ceux-ci soient correctement signalés.
svn
merge
tree-conflict
Greg
la source
la source
Réponses:
J'ai trouvé la solution en lisant le lien que Gary a donné (et je suggère de suivre cette voie).
Pour résumer le conflit d'arborescence lors de la validation de votre répertoire de travail avec le client SVN 1.6.x, vous pouvez utiliser:
où
.
est le répertoire en conflit.AVERTISSEMENT : «Valider votre répertoire de travail» signifie que votre structure sandbox sera celle que vous validez, donc si, par exemple, vous avez supprimé un fichier de votre sandbox, il sera également supprimé du référentiel. Cela s'applique uniquement au répertoire en conflit.
De cette façon, nous suggérons à SVN de résoudre le conflit (
--resolve
), en acceptant la copie de travail à l'intérieur de votre sandbox (--accept working
), récursivement (-R
), à partir du répertoire courant (.
).Dans TortoiseSVN, la sélection de "Résolu" sur le clic droit résout en fait ce problème.
la source
svn rm'd
un répertoire que vous pensiez n'est plus nécessaire, mais quelqu'un d'autre a ajouté un nouveau fichier qui est nécessaire. Lorsque vous mettez à jour votre copie de travail, vous devriez obtenir un conflit d'arborescence. Si vous acceptez aveuglément votre solution (en supprimant le répertoire), vous supprimerez le fichier de cette personne. Il n'y a pas de bouton magique «faites ce qu'il faut». Vous devez comprendre ce que vous faites, pourquoi cela est en conflit avec la dernière version et comment le résoudre correctement.git
. Étant donné que ce n'est probablement pas une option pratique pour le demandeur, traiter la situation telle que décrite dans cette réponse est la meilleure option.Subversion 1.6 a ajouté des conflits d'arbre pour couvrir les conflits au niveau du répertoire. Un bon exemple serait lorsque vous supprimez localement un fichier, puis une mise à jour essaie de réduire le texte sur ce fichier. Un autre est lorsque vous avez un changement de nom de subversion d'un fichier que vous modifiez car il s'agit d'une action Ajouter / Supprimer.
Le blog Subversion de CollabNet contient un excellent article sur les conflits d'arbres .
la source
D'après mon expérience, SVN crée un conflit d'arborescence LORSQUE je supprime un dossier. Il ne semble y avoir aucune raison.
Je suis le seul à travailler sur mon code -> supprimer un répertoire -> commit -> conflit!
J'ai hâte de passer à Git .
Je dois préciser - j'utilise Subclipse . C'est probablement le problème! Encore une fois, j'ai hâte de changer ...
la source
Je ne sais pas si cela vous arrive, mais parfois je choisis le mauvais répertoire à fusionner et j'obtiens cette erreur même si tous les fichiers apparaissent complètement bien.
Exemple:
Fusionner / svn / Projet / branches / certaines branches / Sources vers / svn / Projet / tronc ---> Conflit d'arbre
Fusionner / svn / Project / branches / some-branch vers / svn / Project / trunk ---> OK
Cela peut être une erreur stupide, mais ce n'est pas toujours évident parce que vous pensez que c'est quelque chose de plus compliqué.
la source
Ce qui se passe ici est le suivant: vous créez un nouveau fichier sur votre tronc, puis vous le fusionnez dans votre branche. Dans le commit de fusion, ce fichier sera également créé dans votre branche.
Lorsque vous fusionnez votre branche dans le tronc, SVN essaie à nouveau de faire de même: il voit qu'un fichier a été créé dans votre branche, et essaie de le créer dans votre tronc dans le commit de fusion, mais il existe déjà! Cela crée un conflit d'arbre.
La façon d'éviter cela est de faire une fusion spéciale, une réintégration . Vous pouvez y parvenir avec le
--reintegrate
commutateur.Vous pouvez lire à ce sujet dans la documentation: http://svnbook.red-bean.com/en/1.7/svn.branchmerge.basicmerging.html#svn.branchemerge.basicmerging.reintegrate
Après avoir réintégré une branche, il est fortement conseillé de la supprimer, sinon vous continuerez à avoir des conflits d'arbres à chaque fois que vous fusionnerez dans l'autre sens: du tronc à votre branche. (Pour exactement la même raison que celle décrite précédemment.)
Il y a un moyen de contourner cela aussi, mais je ne l'ai jamais essayé. Vous pouvez le lire dans cet article: Réintégration de la branche Subversion en v1.6
la source
--reintegrate
option a été déconseillée dans Subversion 1.8. À partir de SVN 1.8, ce type de fusion est automatique!Cela peut être dû au fait de ne pas utiliser les mêmes clients de version partout.
L'utilisation d'un client version 1.5 et d'un client version 1.6 vers le même référentiel peut créer ce type de problème. (Je viens de me mordre.)
la source
Si vous rencontrez des conflits d'arborescence qui n'ont pas de sens parce que vous n'avez pas modifié / supprimé / approché du fichier, il y a également de bonnes chances qu'il y ait une erreur dans la commande de fusion.
Ce qui peut arriver, c'est que vous avez déjà fusionné un ensemble des modifications que vous incluez dans votre fusion actuelle. Par exemple, dans le tronc, quelqu'un a modifié un fichier, puis le renomme plus tard. Si dans votre première fusion vous incluez la modification, puis dans une deuxième fusion incluez à la fois la modification et le renommage (essentiellement une suppression), cela vous donnera également un conflit d'arborescence. La raison en est que la modification précédemment fusionnée apparaît alors comme la vôtre et que la suppression ne sera donc pas effectuée automatiquement.
Cela peut se produire sur les référentiels 1.4 au moins, je ne sais pas si le mergetracking introduit dans 1.5 aide ici.
la source
Jusqu'à aujourd'hui, car depuis au moins 3 mois, j'ai régulièrement rencontré des centaines de conflits d'arbres en tentant de fusionner une branche dans le tronc (en utilisant TortoiseSVN 1.11 ). Qu'il soit rebasé ou non, BTW. J'utilise TortoiseSVN depuis sa v1, en 2004, et j'ai toujours réintégré des branches. Quelque chose a dû se produire récemment, je suppose?
Alors aujourd'hui, j'ai exécuté cette expérience simple, et j'ai trouvé ce qui créait ces conflits fous:
Discussion: (voir pièce jointe)
toutes les révisions ... de quoi? Je ne savais pas que le client devait faire référence à " toutes les révisions de la cible! (Tronc)", car, dans le processus de réintégration de cette branche, j'ai vu la mention "Fusionner les révisions 1-HEAD"! OMG. Pauvre diable, tu tombes ici à mort. Cette branche est née @ 393, ne pouvez-vous pas lire son acte de naissance, pour l'amour de Dieu?
Résolution:
Moral: Je ne comprends pas pourquoi ils n'ont toujours pas corrigé ce bogue, car il en est un, je suis désolé. Je devrais prendre le temps de rapporter cela avec eux.
la source
J'ai également rencontré ce problème aujourd'hui, bien que mon problème particulier ne soit probablement pas lié au vôtre. Après avoir inspecté la liste des fichiers, j'ai réalisé ce que j'avais fait - j'avais temporairement utilisé un fichier dans un assemblage d'un autre assemblage. J'y ai apporté de nombreuses modifications et je ne voulais pas rendre orphelin l'historique SVN, donc dans ma branche, j'avais déplacé le fichier du dossier de l'autre assembly. Ce n'est pas suivi par SVN, il semble donc que le fichier soit supprimé puis rajouté. Cela finit par provoquer un conflit d'arbre.
J'ai résolu le problème en replaçant le fichier, en validant, puis en fusionnant ma branche. Ensuite, j'ai reculé le fichier. :) Cela semblait faire l'affaire.
la source
J'avais un problème similaire. La seule chose qui a réellement fonctionné pour moi a été de supprimer les sous-répertoires en conflit avec:
Ensuite, copiez-les à nouveau à partir d'un autre répertoire racine de la copie de travail qui les contient avec:
Alors fais
et
Vous pourriez recevoir des avertissements avec le dernier, mais ignorez-les et enfin
la source
J'ai eu ce même problème et l'ai résolu en refaisant la fusion à l'aide de ces instructions . Fondamentalement, il utilise la "fusion de 2 URL" de SVN pour mettre à jour
trunk
l'état actuel de votre branche, sans trop se soucier de l'historique et des conflits d'arborescence. M'a sauvé de la correction manuelle de 114 conflits d'arborescence.Je ne sais pas si elle préserve l'histoire aussi bien qu'on le souhaiterait, mais cela en valait la peine dans mon cas.
la source
Un scénario que je rencontre parfois:
Supposons que vous ayez une jonction à partir de laquelle vous avez créé une branche de publication. Après quelques modifications sur le tronc (en particulier la création du répertoire "some-dir"), vous créez une branche fonctionnalité / correction que vous souhaitez également fusionner ultérieurement dans la branche de publication (car les modifications étaient suffisamment petites et la fonctionnalité / correction est importante pour la publication) .
Si vous essayez ensuite de fusionner la branche feature / fix directement dans la branche release, vous obtiendrez un conflit d'arborescence (même si le répertoire n'existait même pas dans la branche feature / fix):
Vous devez donc fusionner explicitement les validations qui ont été effectuées sur le tronc avant de créer la branche feature / fix qui a créé le répertoire "some-dir" avant de fusionner la branche feature / fix.
J'oublie souvent cela car ce n'est pas nécessaire dans git.
la source