svn命令行修改已提交的版本备考

svn命令行修改已提交的版本备注
参考文章:
*.com/questions/304383/how-do-i-edit-a-log-message-that-i-already-committed-in-subversion

参考文章实现:
由于缺省情况下为安全起见Subversion不允许开发人员修改已提交reversion的日志信息,这样会报错误,提示不能修改以及请SVN管理员安装pre revprop change hook。

这个hook是什么意思呢? 实际上是一个版本日志变更的预处理程序,主要是用来保存老的日志信息,以避免在变更发生错误的时候,无法恢复。

那么需要管理员执行以下操作,就可以赋予开发人员变更日志的操作能力。

————————————————————————————————————————

1.将pre-revprop-change.bat(博客附件中可下载)文件拷贝到服务器资源hook路径下,如图

svn命令行修改已提交的版本备考



2.利用tsvn(小乌龟)可以使用edit log进行修改

svn命令行修改已提交的版本备考




3.命令行执行如下命令,即可达到修改效果
没有在服务器放置bat效果:
C:\Users\Malt>svn propset -r 1 --revprop svn:log "没有在服务器放置bat效果" svn://192.168.98.131/mentoree_repos --username mentorlib  --password mentorLib_Lib
————————————————————————————————————
控制台输出:
svn: E165006: 此版本库不允许修改版本属性;请管理员创建 pre-revprop-change 钩子
————————————————————————————————————



4.在服务器放置bat效果:
C:\Users\Malt>svn propset -r 1 --revprop svn:log "修改Malt" svn://192.168.98.131/mentoree_repos --username mentorlib  --password mentorLib_Lib
控制台输出:
设定属性 “svn:log” 于版本库版本 1


此时用tsvn查看效果不一定可以立刻显示, 我们用命令行执行svn log, 如下图效果:
svn命令行修改已提交的版本备考

—————————————————————————————————————————
实现了效果之后我们可以了解一下hook中的实现:

if "%4" == "svn:log" exit 0
echo Property '%4' cannot be changed >&2
exit 1

在属性修改前,该脚本会被执行,如返回0即表示同意修改。另外,注意该目录下本就有一个pre-revprop-change.tmpl,但那个是xNix的shell脚本,windows平台貌似不太好用。

然后在客户端就可以正常修改了,其后台应该是调用类似下面的命令:

svn propset -r N --revprop svn:log "new log message" URL

也可以在服务端通过运行下面的命令来做同样的事情,其中FILE是保存新日志信息的文件路径:

svnadmin setlog REPOS_PATH -r N FILE