SVN copy between repositories with history

半城伤御伤魂 提交于 2019-11-29 20:07:28

[Edit: The original reply below is from pre SVN 1.7, and there this was the best way to solve the problem (although it is not the primary use case of svnsync). In SVN 1.7 client or later there is the svnrdump tool that does more directly what you are trying to achieve)]


use svnsync to synchronize the source to the destination (needs admin access to the destination repository or at least a way to add hooks, but no special access to the source repository). If the destination already has revisions, sync the source to a temporary repository, and then use svn-merge-repos.pl to merge the two local repositories.

The way to typically achieve this is the svnadmin dump command. If you don't have svnadmin access then I would ask the person that does if they can supply you with a dump. This will make the process of importing much easier as well.

Are you on a shared repository currently? This might make the person that owns the repository leary of giving you a dump, since it will be a copy of the entire repository, not just your piece of it.

Kenneth Xu

I had a similar need (hence visited this page) and ended up writing my own program to do the work. Thought the tool may be useful to others who are still looking for a solution:

  • The tool needs no admin access to the source repository.
  • It supports add/delete/copy/move, preserves node property (e.g. svn:ignore, svn:external) and revision property (i.e., you get the correct author and date/time).
  • Can also incrementally copy new revisions.
  • Has both GUI and a command line utility.

If anybody is interested, check it out here

You can use git-svn (or perhaps another SCM system) to accomplish this task.

The steps would be:

1. Get a git svn clone of each repository:
    git svn clone <SVN-REPOSITORY-FROM> source-repo
    git svn clone <SVN-REPOSITORY-TO> dest-repo

 2. Create patches to be imported:
    cd source-repo/
    export commitFrom=`git log --pretty=%H | tail -1`
    git format-patch -o /tmp/mergepatchs ${commitFrom}..HEAD .

 3. Import the patches
    cd dest-repo/
    git am /tmp/mergepatchs/*.patch

Referenced: http://blog.neutrino.es/2012/git-copy-a-file-or-directory-from-another-repository-preserving-history/

If you need only a version control repo with full changeset, you can use bzr with bzr-svn plugin. When you checkout a svn repo, everything will be syncronized.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!