Subversion / Tortoise:在所有存储库中替换字符串?

Subversion / Tortoise:在所有存储库中替换字符串?

有人知道一种在所有 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

当然,你应该对每个项目都这样做。

相关内容