我不记得会在纯服务器端副本之后执行挂钩(并且懒得 RTFM 或手动检查),但无论如何
在钩子中,您必须使用svnlook
带有不同子命令的命令
因为钩子是存储库范围的,所以您的第一个检查将是“它是提交到/tags
存储库的另一个子树还是提交到另一个子树” svnlook dirs-changed
(手动尝试命令以查看不同修订的输出,以防好的操作系统svnlook dirs-changed |grep tags
会回答问题)
在提交到 /tags 的情况下,您必须获取并检查内部(创建的)子目录的名称/tags
。在这里,来自 WC 的服务器端标记和标记给出(至少对我而言)不同的结果
svnlook 目录更改
服务器端标记
>svnlook dirs-changed z:\repo
tags/
WC标记
>svnlook dirs-changed z:\repo
tags/
tags/App_Main_1.0.0_2/
tags/App_Main_1.0.0_2/1/
tags/App_Main_1.0.0_2/1/2/
svnlook 变了
服务器端标记
>svnlook changed z:\repo
A tags/App_Main_1.0.0_1/
WC标记
>svnlook changed z:\repo
A tags/App_Main_1.0.0_2/
U tags/App_Main_1.0.0_2/1/2/c.txt
U tags/App_Main_1.0.0_2/1/b.txt
U tags/App_Main_1.0.0_2/a.txt
并且在标签内的相同树下观察到如此明显的差异
>svnlook tree z:\repo
...
tags/
App_Main_1.0.0_1/
1/
2/
c.txt
b.txt
a.txt
App_Main_1.0.0_2/
1/
2/
c.txt
b.txt
a.txt
...
我认为,与其在钩子中添加一些逻辑(但您可以尝试对两种类型的标签都使用svnlook changed | head -n 1
:只捕获第一行输出,其中包含创建的标签的名称),您必须强制执行严格的标记策略“仅标记主干” HEAD(使用服务器端副本)”。
在这种情况下,测试将更短且可重复,例如svnlook changed | grep -q -E REGEXP
(为测试约定构建 REGEXP<application>_<project>_<version>_<iteration>
是您的任务)加上|减去一些细节