You can't do a "reorg", but you could possibly recreate the branches.

Perhaps a pain, but you certainly could build a script that iterates through the changes on your branch, and recreates them by taking advantage of Subversion's three way merge functionality (using --ignore-ancestry!).

More specifically:

1) identify the point in history on the old branch where it exactly matched trunk

2) Create new branch from that point in time that you just identified

3) Do a log on the old branch, identifying each change that was applied to the branch.

4) Checkout a working copy of the new branch

5) For each revision on the old branch, do a three way merge followed by commit (make sure you're in the working copy for the new branch!):

svn merge --ignore-ancestry -r___:___ /branches/oldbranch

You'll need to walk through each revision in the old branch. Start with the branch point revision # to first change revision #. Then first change revision # to second change revision #. Etc.

Make sense?

Eric.



On Thu, Mar 19, 2015 at 4:34 AM, Buddy Butterfly <buddy.butterfly@web.de> wrote:

thanks for explanation.
Yes, indeed it looks like the branches have not been branched from trunk.
So there is no way to reorg and get the "old" branches to be recognized as
correct branches? I did a test and branched from the new trunk and copied
that content of the old branch into it. Now the branch is detected as such
and it can be switched to from trunk. But this means we would have to redo
manually all branches and tags etc? I was hoping there is some other way.

Am 18.03.2015 um 22:01 schrieb Bert Huijben:
>
> You can avoid the error by passing --ignore-ancestry to switch… but that doesn’t fix the ancestry problem
>

>
> What it tries to tell you is that the branches were not created from trunk.
>

>
> Usually you would
>
> * create trunk
>
> * apply some changes to trunk
>
> * copy that to a branch
>
> * apply some changes to trunk
>
> * copy that to a branch
>
> * update trunk….
>
> *…
>

>
> That way the branches share ancestry with trunk (and thereby with each other). Further updates on the branches are possible, but they still share (some) history, as they all originated from the original trunk.
>

>

>
> Your script says that you created the branches as new, so Subversion is right that the branches don’t share ancestry with trunk. Usually you only want to switch between related branches. (A common error is to branch to the wrong directory level. This is caught by this check). The --ignore-ancestry override works for those cases that there is no shared ancestry… but this might tell you that everything will be deleted and checked out clean (depends on more things), so perhaps in some cases just deleting and a clean checkout may be faster.
>

>
>                 Bert
>

>
> *From:*Eric Johnson [mailto:eric@tibco.com]
> *Sent:* dinsdag 17 maart 2015 23:14
> *To:* buddy.butterfly@web.de
> *Cc:* users@subversion.apache.org
> *Subject:* Re: Reoganizing svn structure and error "shares no common ancestry"

>

>
> Does switching to a new branch work before the reorganization that you did?
>

>
> What version of Subversion are you using?
>

>
> Can you reproduce the problem with a mock version of your repository?
>

>
> When you do an svn log of your new branch, does the history go back to a common revision with the new trunk? Likewise, with your new trunk, does an svn log show a common revision with the branch?
>

>
> Eric
>

>

>
> On Mon, Mar 16, 2015 at 3:18 AM, Buddy Butterfly <buddy.butterfly@web.de <mailto:buddy.butterfly@web.de>> wrote:
>
>
>     Hi,
>
>     finally we would like to restructure our badly structured svn repo.
>     Over time a lot of stuff flew into this repo. I have used kdesvn for
>     moving the trees online in the repo. kdesvn does a copy and delete
>     when moving. I have also tried to use a svn move. Steps were as follows:
>
>     1. Created a new repo path to the project.
>     2. Created branches, tags and trunk below ist.
>     3. Moved (like described above) original project below the new trunk.
>     4. Similar like 3. for branches with creating the branches/<branch> and
>        moving the old branches to the new ones.
>     5. Checked out the new trunk.
>     6. Tried to switch to one of the new branches.
>
>     Step 6. always give the error switching not possible "shares no common
>     ancestry".
>
>     The moving like described above is very convenient and would allow the reorg
>     in an acceptable time frame. How is it possible to do this and create or
>     manipulate the history such that a common ancester will be created?
>
>     Do you propose another workflow to acomplish this in an easy way?
>
>     Thanks a lot and cheers,
>     Buddy
>

>