如何将Project从一个Subversion存储库移动到另一个?

时间:2012-11-23 12:11:35

标签: svn repository

我正在尝试编写一个脚本,将一些项目从一个(内部)Subversion存储库复制到另一个(外部)Subversion存储库。我已经尝试过并且未能将svnadmin转储与svndumpfilter结合使用,并且我一直遇到有关已移动且原始位置不再存在的文件的问题。我尝试过使用svndumpfilter2和svndumpfilter3,但是各种各样的错误阻碍了我追求这条路线。

由于保留更改历史记录,我认为简单的脚本就足够了。我只是从旧存储库中检出项目,使用switch更新存储库,然后执行更新。但是,我只是得到一个错误,指出新存储库的UUID无效:

* svn:'file:/// home / developer / svn / NEW_REPO / java / jar / FOO'的存储库有uuid'c315c701-d367-47aa-a473-87f95147eb5f',但WC有'8ce3ae18- f586-4a38-8bf8-e0fc691799fb'*

这是我的剧本:

svn checkout file:////home/developer/svn/OLD_REPO/java/jar/FOO
cd FOO
svn switch --relocate file:////home/developer/svn/OLD_REPO/java/jar/FOO file:////home/developer/svn/NEW_REPO/java/jar/FOO .
svn update

任何人都可以看到我做错了或切换不适合这项任务吗?

更新

我已经推动了这一进程。 UUID问题与我如何创建目标存储库有关。我已经跑了

svnadmin setuuid file:////home/developer/svn/NEW_REPO <old_repo_id>

现在我没有得到UUID问题。但是我反而得到了问题:

svn:无法替换

中的目录

我不明白为什么。尝试从目录外部更新项目也不起作用。

更新

根据建议我已经将我的脚本切换到现在使用导入和导出,这适用于我的“to repository”为空的时间。我的脚本随后不起作用。谁能帮忙。脚本现在是:

# Create a list of projects to Update
echo java/pom/FOO > list.txt;
echo java/jar/FOO2 >> list.txt;
echo java/jar/FOO2 >> list.txt;

for project in `cat list.txt`; do
    echo "Updating: "${project};
    projName=`echo ${project} | awk -F"/" '{print $NF}'`

    # Obtain the current version 
    svn export ${FROM_REPO}${project} ${projName}
    # Remove the .svn information
    find ${projName} -name .svn -exec rm -rf {} \;
    # Import the project into the new repository
    svn import -m 'Updated by script' ${projName} ${TO_REPO}${project}
    rm -rf ${projName}
done;

3 个答案:

答案 0 :(得分:2)

如果您使用svn export,则无需删除.svn目录。

我做了很多次。程序本身相当简单,但确实需要多次通过:

第一次通过:find $from -type d

  • 如果您在$from中找到了不在$to中的目录,请执行svn add
  • 如果$from$to都有该目录,请转到下一步。

第二次通过:find $to

  • 如果您的$to$from中不存在的目录或文件,请对该文件或目录执行svn delete

第三次通过:find $from -type d

  • 如果文件同时存在$from$to,请将文件从$from复制到$to
  • 如果文件存在于$from但不存在$to,请将文件$from复制到$to并对该文件执行svn add。< / LI>

你可以为你的循环做这样的事情:

find `$to` -type -d | while read $directory
do
     blah, blah, blah
done

答案 1 :(得分:1)

如果您只想将项目的HEAD修订版(我假设它包含在一个目录中)从一个svn存储库移动到另一个svn存储库,那么最简单的方法可能是svn export它从原始位置(到本地目录),然后svn import到新位置。

答案 2 :(得分:0)

使用Mercurial + HGSubversion(以及中间的一些黑魔法),你的过程将只是

hg pull OLD_REPO
hg push NEW_REPO