我正在尝试编写一个脚本,将一些项目从一个(内部)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;
答案 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