我正在尝试编写一个脚本,它将许多项目从一个(内部)Subversion 存储库复制到另一个(外部)Subversion 存储库。我尝试过将 svnadmin dump 与 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
谁能看到我做错了什么或者 switch 不适合这个任务?
更新
我已经把它向前推进了。UUID 问题与我创建目标存储库的方式有关。从那以后我就跑了
svnadmin setuuid file:////home/developer/svn/NEW_REPO <old_repo_id>
现在我没有得到 UUID 问题。但是我反而得到了这个问题:
svn:无法从内部替换目录
我不明白为什么。尝试从目录外部更新项目也不起作用。
更新
根据建议,我已将脚本切换为现在使用导入和导出,这适用于我的“存储库”为空的时候。我的脚本在随后的时间里不起作用。任何人都可以帮忙。脚本现在是:
# 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;