tree conflict: local add, incoming add upon merge
Hi Subversion Gurus, I have a question about merging with a tree conflict. I created the same directory, called 'config' on two branches. The directory had different files on each branch, let's call them 'foo.java' on branch A and 'bar.java' on branch B. When I merged branch A -> branch B, I got a "tree conflict" saying "local add, incoming add upon merge." I can understand this error: the merge tried to add the directory as expected but it was already there. My desired resolution is to keep the 'config' directory and just add the file from branch A. That is, 'config' would contain both foo.java and bar.java. The only way to achieve this I found was to delete 'config' (with no commit), do the merge, and then revert the deletion of bar.java. It worked, but it seems weird to do a delete just to revert it. Do you know any better way of doing it? It took me a while to figure out the solution, with lots of fruitless Googling. Thanks in advance, David -- Wise men _still_ seek Him.
Re: tree conflict: local add, incoming add upon merge
On 05/24/2011 11:05 AM, Stefan Sperling wrote: > On Tue, May 24, 2011 at 10:45:09AM -0400, David Tombs wrote: >> Hi Subversion Gurus, >> >> I have a question about merging with a tree conflict. >> >> I created the same directory, called 'config' on two branches. The >> directory had different files on each branch, let's call them 'foo.java' >> on branch A and 'bar.java' on branch B. >> >> When I merged branch A -> branch B, I got a "tree conflict" saying "local >> add, incoming add upon merge." I can understand this error: the merge >> tried to add the directory as expected but it was already there. My >> desired resolution is to keep the 'config' directory and just add the file >> from branch A. That is, 'config' would contain both foo.java and bar.java. >> >> The only way to achieve this I found was to delete 'config' (with no >> commit), do the merge, and then revert the deletion of bar.java. It >> worked, but it seems weird to do a delete just to revert it. Do you know >> any better way of doing it? It took me a while to figure out the >> solution, with lots of fruitless Googling. > > The problem with tree conflicts is that each one is unique. > You might always find more creative ways of solving them. > But I think that you've taken a very good approach. > > In short, whatever works for you is best :) > Hi Stefan, Thanks for the response. Unfortunately, I don't think my solution turned out very well. I ended up with a corrupted working copy that thought bar.java was there but the server disagreed whenever I did a server-hitting command. I guess what I should have done instead was delete config and then re-add bar.java instead of reverting it. Thanks, David
Re: tree conflict: local add, incoming add upon merge
On 05/25/2011 07:45 AM, Stephen Butler wrote: > Hi David, > > Attached is a reproduction script. I could reproduce the corrupted working > copy in 1.6.16. > > With 1.7 (r1127008), the corruption doesn't occur, but there's still a bug: > 'svn status' displays bar.java (as deleted) after the merge. The revert of > bar.java has no effect. > > Anyway, making local changes to a working copy just to avoid tree > conflicts, is a sign that Subversion's conflict resolution is lacking. > There's > no way to tell the merge command to resolve add-vs-add tree conflicts by > merging the trees. > > I guess we need 'svn merge --accept theirs-conflict' (or mine-conflict) to > apply to tree conflicts. That would be useful for 'svn update', too. This > falls under issue 3144: > > http://subversion.tigris.org/issues/show_bug.cgi?id=3144 > "interactive conflict resolution does not know about tree-conflicts" > > Note: At the end of the script I include an alternate workaround: 'svn copy > ^/trunk/config/foo' to the branch. This has the advantage of preserving > each file's history. > > > > Steve > Excellent, Steve. I thought about the 'theirs-conflict' option to resolve this as well. Hope my problem can result in some improvements to svn. :) David