批量修改 SVN 库中的用户名

Redmine 提供了整合 SVN 的功能,整合后可以在 Redmine 中直接查看 SVN 的修订记录。当 SVN 修订记录中的修改者名称与 Redmine 系统中的用户名一致时,Redmine 还会自动将用户名解析为真实姓名。

这个功能非常好用,不过因为有些用户的 Redmine 用户名和 SVN 用户名不一致,导致帐号无法关联。所以才有了我批量修改 SVN 库中用户名的需求。

修改某个 SVN 修订记录的用户名,可以使用以下 SVN 命令:

svn propset --revprop -r $rev svn:author $new_author $svn_url

不过 SVN 库默认是不允许修改用户名的,所以需要在版本库目录下的 hooks/ 目录中新建一个钩子文件:pre-revprop-change,这个文件可以直接从pre-revprop-change.tmpl复制,内容修改如下:

REPOS="$1"
REV="$2"
USER="$3"
PROPNAME="$4"
ACTION="$5"

if [ "$ACTION" = "M" -a "$PROPNAME" = "svn:log" ]; then exit 0; fi
if [ "$ACTION" = "M" -a "$PROPNAME" = "svn:author" ]; then exit 0; fi

echo "Changing revision properties other than svn:log is prohibited" >&2
exit 1

保存后将权限修改为 755。

当然,修订记录可能很多,我们不可能一条条去执行命令修改,所以需要写个脚本去批量修改。不过我发现 TortoiseSVN 就有这个功能,查看 log 日志,然后搜索要修改的的用户名相关的修订记录,全选,右键,Edit Author,填入新用户名,确认后即可完成批量修改了 😛

Redmine 似乎会对 SVN 修订记录进行缓存,所以改完用户名后,回到 Redmine 上,把原有的 SVN 删除掉,重新新建就可以了。

— EOF —

发表评论

电子邮件地址不会被公开。 必填项已用*标注