On Sep 20, 2008, at 11:12 AM, Robert P. J. Day wrote:
> whoops, never mind, i think i puzzled it out.
For the benefit of others who might be wondering, you could tell us
what you found. But I'll take a stab at it.
> Quoting "Robert P. J. Day" <rpjday_at_crashcourse.ca>:
>> i suspect there's an easy way to do this with svn 1.5 but i'm
>> currently stuck with 1.4 for a while so i'm open to suggestions.
>> - start with trunk
>> - to do some specialized work, create branch "b1" and get to
>> work on "b1"
>> - after a while, create a more specialized branch off of "b1"
>> called "b2" and get to work on "b2"
>> - after a while working on "b2", realize it's a bad name and
>> "svn rename" it to "c2" instead, continue working on "c2"
>> - finally done, time to start merging everything back
>> uh oh.
>> my first thought is that i want to merge everything on the b2/c2
>> branch back into b1, then merge *that* back into trunk. but at
>> this point, how do i get access to the revisions that were on
>> the former "b2" branch between the time i created it from "b1",
>> and the time i renamed it to "c2"?
>> technically, since i renamed "b2" -> "c2", the "b2" branch doesn't
>> exist anymore. normally, on a branch, i'd ask for the log and
>> "--stop-on-copy", but that causes the log to stop at the point of
>> the renaming.
>> am i making any sense? as i see it, if i have multiple levels
>> of branching, the normal way to start merging them back in is in
>> reverse order. but i'm not sure what to do about that "missing"
>> interval that was part of a branch that no longer exists.
>> is this something i would solve with peg revisions? thanks.
Subversion follows history through renames so this is not a problem.
You need to merge [the range of revisions of c2 that starts when you
first created b2 and ends at what is currently HEAD] from c2 into b1.
Then, assuming you want to merge b1 into trunk, you can do that.
Let's assume the HEAD revision is currently 500.
Use "svn log --stop-on-copy -r 1:HEAD --limit 1 url://to/branches/c2"
to find the revision in which c2 was created from b2. For the sake of
example, let's call this 400.
Now you can use "svn log --stop-on-copy -r 1:HEAD --limit 1 url://to/
branches/b2_at_399" to find the revision in which b2 was created from
b1. Let's call this 300.
So you go into a clean working copy of b1 and you merge revisions 300
thru 500 of c2 into it, like this:
svn merge -r300:500 url://branches/c2 .
Manually resolve any conflicts, test the changes until you're
satisfied they're right, then commit, noting in your commit message
what you did:
svn ci -m "merge r300-500 from c2 branch into b1 branch"
Ok, that's done. You can delete the c2 branch now and continue work
on the b1 branch.
To unsubscribe, e-mail: users-unsubscribe_at_subversion.tigris.org
For additional commands, e-mail: users-help_at_subversion.tigris.org
Received on 2008-09-20 21:54:56 CEST