Can I move an existing Subversion repository into a new parent repository (and retain the history)?

前端 未结 4 1454
夕颜
夕颜 2020-12-29 04:02

Currently I have a root-level repository set up for each project, like so:

Project1
Project2
Project3
Project5
Project5

I\'d like to reorga

相关标签:
4条回答
  • 2020-12-29 04:44

    svnbook: Migrating Repository Data Elsewhere

    0 讨论(0)
  • 2020-12-29 04:51

    Since the accepted answer is incomplete and hasn't been corrected, here's how you actually do it.

    (1) Your source repo is a single-project repo, with top-level dir foo. Go to your old server and create a dump file:

    [old-server]$ svnadmin dump /path/to/old-repo > foo.dump
    

    (2) Your target repo already contains two projects, with top-level dirs bar and baz, and is at http://new-server/svn. Now create an additonal foo top level:

    [client]$ svn ls http://new-server/svn/
    bar/
    baz/
    [client]$ svn mkdir -m "Adding new foo project" http://new-server/svn/foo
    [client]$ svn ls http://new-server/svn/
    bar/
    baz/
    foo/
    

    (3) On your new server, the repo is at /path/to/new-repo (which is what http://new-server/svn/ maps to). Note that the svn mkdir above didn't actually create a new directory in /path/to/new-repo; it just changed the database. Go to the new server and

    [new-server]$ svnadmin load /path/to/new-repo --parent-dir foo < foo.dump
    

    Done, with complete history. You can now check out foo as:

    [client]$ svn co http://new-server/svn/foo foo
    

    If this is the first time you've done an svnadmin, you may find that you get file permission errors (txn-current-lock/etc) if, for example, the repo is owned by apache, and you're not in the apache group. The easiest fix is to add yourself to the apache group.

    0 讨论(0)
  • 2020-12-29 04:55

    You should be able to dump it, then reload it to a subdirectory of a new repository:

    svnadmin dump http://oldrepo/ > mydump

    svnadmin load --parent-dir my/new/folder http://newrepo/ < mydump

    0 讨论(0)
  • 2020-12-29 05:00

    You can use tailor to import the revisions into the new repository. It checks out the code from the old repository one revision after another and commits it to the new repository.

    This can also be used to convert the history of one type of version control system to another.

    An tailor project file would look like this:

    [DEFAULT]
    root-directory = /var/tmp/tailor
    verbose = true
    
    [myproject]
    source = svn:oldrepo
    target = svn:newrepo
    start-revision = INITIAL
    
    [svn:oldrepo]
    repository = svn://oldhost.example.com/svnroot
    module = trunk
    subdir = repo-in
    
    [svn:newrepo]
    repository = svn://newhost.example.com/some/path
    module = trunk
    subdir = repo-out
    

    If this file is called settings.cfg, this will copy /trunk of the old repository revison by revison to the new location:

    tailor --configfile=settings.cfg myproject
    

    The target repository needs to already exist and probably should have an empty trunk subdirectory.

    0 讨论(0)
提交回复
热议问题