我正在移动SVN提供程序,在这样做的过程中,我所有的repo都像https://www.provider1.com/myrepo1
一样启动,所以我在该repo上进行了SVN转储,在repo中,我的路径启动trunk/src
、trunk/lib
等。然而,我的新提供程序只给我一个URL,让我将项目转储到这些URL中。因此,我需要重命名转储中的所有目录,以便在每个路径中添加一个新的父目录,使其看起来像myrepo1/trunk/src
、myrepo1/trunk/lib
等。我意识到我可以在每个URL repo中创建一个新目录,并将文件夹移动到其中。但这不会改变它的历史记录。那么,有没有办法使用svndumpfilter将此父目录直接添加到转储文件中呢?如果没有,我该怎么办?
以下是我所做的工作。毕竟我没有使用svndumpfilter。相反,我使用svnadmin
创建了一个新的存储库,然后在新创建的svn repo中创建了一个子目录。然后使用svnadmin load
加载转储,告诉它将该转储放在新的父目录下。
首先拉下项目并创建该项目的转储:
svnadmin create project1
emacs repo/hooks/pre-revprop-change
chmod 755 project1/hooks/pre-revprop-change
svnsync init file://$(pwd)/project1 https://somehost.com/svn/project1
svnsync sync file://$(pwd)/project1
svnadmin dump project1 > some.dump
接下来创建一个新的svn项目,我们将把它的转储加载到新的父目录:
svnadmin create someDirectory
svn mkdir -m "Add root directory to project" file://$(pwd)/someDirectory/THE_PARENT_NAME
cat some.dump | svnadmin load --parent-dir THE_PARENT_NAME someDirectory
或者,您可以使用基于SVNKit:的svnkitfilter
$ svnkitfilter OLD_ROOT_URL NEW_URL --prefix myrepo1