有人知道一种在所有 Subversion 存储库中替换字符串的优雅方法吗?
类似这样的问题:搜索“Facebook”并将其替换为“Twitter”?或者唯一可行的解决方案是检查所有项目,进行更改,然后再次提交?感谢您的帮助。
答案1
乔里尔,这会改变的全部存储库中的修订。我认为这不是一个正确的决定。
我建议使用以下脚本。假设您在纯文本文件 repolist.txt 中有一个存储库 URL 列表
#!/bin/sh
# List of repository URLs
repolist=`cat repolist.txt`
# Root for temporary working directories
wdroot="wd"
# Source filenames regexp for find(1)
fname='.*\.(txt|java|xml)'
# Search/replace strings
oldstr="Twitter"
newstr="Plurk"
# SVN commit message
comment="replaced $oldstr by $newstr"
mkdir -p $wdroot
cd $wdroot
for repo in $repolist; do
echo Repository: $repo
wd=`basename $repo`
echo ... checkout
svn co $repo $wd
echo ... search and replace
find $wd -regextype posix-egrep -regex $fname | xargs sed -i "s/${oldstr}/${newstr}/g"
echo ... checkin
( cd $wd; svn ci -m "$comment" . )
done
答案2
也许你可以尝试类似这样的方法:
- svnadmin dump REPOS_PATH > 转储文件
- sed s/Facebook/Twitter/ dumpfile
- svnadmin 创建新仓库
- cat dumpfile | svnadmin 加载 NEW_REPOS_PATH
当然,你应该对每个项目都这样做。