我正在尝试编写一个预提交钩子脚本,以使用shell脚本强制执行像<application>_<project>_<version>_<iteration>
这样的标记命名约定。
任何人都可以引导我到我可以遵循的文档/链接参考,并可以创建一个。
我已经通过了许多链接,但它对我不起作用
我正在尝试做这样的事情:
ERROR = $SVNLOOK changed $REPO -t $REV |$EGREP "^A.+?/([a-z0-9_]+)/tags/\1-[0-9]+\.[0-9]+\.[0-9]+(\.[0-9]+)?-(dev|rc[0-9]+|final)/.*$" |$WC -l
在regex(EGREP)部分需要帮助,以便我可以创建它。
答案 0 :(得分:0)
我无法回想起在纯服务器端副本之后执行的钩子(并且懒得RTFM或手动检查),但无论如何
在钩子中,你必须使用svnlook
命令和不同的子命令
因为钩子是存储库范围的,所以第一次检查将是&#34;它是否提交到/tags
或另一个子树的存储库&#34; svnlook dirs-changed
(手动尝试命令以查看不同版本的输出,如果操作系统良好svnlook dirs-changed |grep tags
将回答问题)
如果提交到/ tags,您必须获取并检查/tags
内的(已创建)子目录的名称。这里WC的服务器端标记和标记给(至少对我来说)不同的结果
svnlook dirs-changed
服务器端标记
>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
:仅捕获带有已创建标记名称的第一行输出it),你必须强制执行严格的标记策略&#34;仅标记中继的HEAD(使用服务器端副本)&#34;。
在这种情况下,测试将更短并且可以重新启动,例如svnlook changed | grep -q -E REGEXP
(建立用于测试约定的<application>_<project>_<version>_<iteration>
的REGEXP是你的任务)加上|减去一些细节