Posted on 2022-11-28 23:09
小菜枫 阅读(731)
评论(0) 编辑 收藏 引用 所属分类:
器者,工具也
由于之前使用git作为版本管理,当时基于git hook脚本做了一些提交前的检测处理,使用起来还是挺多便利的。但目前更换了SVN作为版本管理,一番查阅下,发现其也有类似的svn hook机制,于是想将之前用到的一些提交前的脚本处理像git那样集成到svn中。
由于svn hook在server端/client端都有,但server端建议只做一些已知的明确的通用的处理,像我期望做的一些静态扫描之类的,可能由于各种不同项目的不同目录跟不同依赖而导致有过滤文件、忽略指定目录、指定文件扫描等等的处理,这些都需要跟实际情况结合在一起,建议是在client端实现的。所以后续所说的hook处理如无特别声明都是基于client端的。
这里首先说明一下如何配置使用svn hook,跟git还是有不少差异的。
环境:windows + tortoisesvn + svn
tortoise和svn的安装,以及相应svn server的搭建及checkout到本地,这里不做赘述,默认读者朋友们已经有相应环境。
1.右键找到tortoisesvn的二级目录setting
2.在settings弹出来的设置界面中,找到Hook Scripts,默认是没有脚本的,点击Add
3.在弹出来的Configure Hook Scripts界面中,先选择要配置的Hook Script,然后再配置工作目录和脚本
其中各类型Hook的执行时机如下:
Pre-Commit Hook:代码提交到远程仓库前
Working Copy Path:是工作目录
Command Line To Execute:配置的需要执行的脚本
Wait for the script to finish:等待脚本执行完(不等待执行完,commit和pre-commit同时执行,如果pre-commit脚本执行不通过,依然会commit成功)
Hide the script while running:隐藏脚本执行时的命令窗口(隐藏了的话,如果脚本执行时间太长,看起来会像commit卡住了一样。但如果没隐藏,则会弹出一个cmd命令窗口,但上面没有显示信息,而且可以被关掉。关掉了的话,会认为hook脚本执行失败而导致commit不了)
Always execute the script:总是执行该脚本(勾选了该项,则配置的脚本一定要执行无报错退出值为0才可以继续commit;如果没勾选,在第一次脚本执行完成后的界面,会有一个Retry whitout Hooks的按钮,点击它就可以跳过Hook Script进行commit)
4.点击OK之后就完成了Script的添加和配置
应用、确定后svn hook相关的配置就完成了。
可以根据实际需要,针对不同目录配置不同的脚本。
然后只要在配置的Working Copy Pat目录及其子目录下触发commit,在填写提交信息后,点击commit的时候,svn就会触发Pre-Commit Hook,执行的动作就是Command Line To Execute所配置的脚本。
这里就可以体现上文建议client端进行pre-commit的好处,可以针对不同的工作目录配置不同的脚本,脚本还可以放置在该目录下,方便维护和管理;同时如果没有特别的处理,那么也可以使用放置在同一个固定目录下的固定脚本。
接下来,将根据不同的需求和工具,定制相应的Pre-Commit Hook脚本,在此之前,由于本文是基于window下的tortoisesvn实现的,所以对应的脚本可以通过指定的参数取得相应的一些环境路径供脚本处理使用:
%0 第0个参数为脚本所在的完整路径(含脚本名及后缀)
%4 第4个参数为上述配置的working copy path路径执
icemaple