Tue, 30 Jan 2024, /Sands, Daniel N./:

So far I have not found a use case where moved file resolution in 1.8+ works as advertised on 1.7 servers.  But more specifically, I have the following case:

The trunk has a directory,
/foo/bar

In my local branch, I have relocated bar to
/baz/bar

Meanwhile, in the trunk, file /foo/bar/example.c got updated.  My local branch has been checked out from the 1.7 server so it no longer knows specifically about file moves.  When I merge the latest changes from the trunk, it creates a tree conflict on /foo/bar. It has completely lost the notion that there is a file within /foo/bar that was edited.

As far as I'm aware this is all client-side behavior – nothing to do with the server. Resource move/rename has always been recorded as a _Delete_ of the original path and a _Copy_ (Add) from the previous path revision. It could be I'm missing something here, also.

 The conflict data only knows that /foo/bar doesn't exist anymore.  My only option for resolution is to accept working – the search for where /foo/bar went also fails. And now the incoming edit to example.c is completely lost, and I wouldn't even know it existed until I did an svn diff on each revision that got merged in.

If I remember correctly, this had only worked the way you expect – automatic content merge into the moved file, pre-Subversion 1.6 when tree conflicts have been introduced. I have never been a fan of this change and the complication to the svn merge it adds.

The way you generally resolve tree conflicts is with an extra merge (but could also be a delete) command per file/tree conflict:

    svg merge ^/foo/bar baz/bar

Then you mark the conflicting files (command per path) as resolved:

    svn resolve baz/bar --accept working

and finally commit, if you're satisfied with the state.

--
Stanimir

Reply via email to