SVN通过指定JIRA票证ID自动从主干到分支合并

时间:2014-07-28 20:07:47

标签: svn merge jira

我使用JIRA作为错误跟踪系统。如果有新发现的错误,则首先将其提交到主干。提交是在特定票证下完成的。 例如,票号#37由提交修复:65,68和74。

有时我需要将票证后退到分行。所以我必须为分支下载一个存储库,即#3并应用以下命令

svn merge -c65,68,74  http://.../svn/trunk

然后为每张票提交等等。

我想要做的是从JIRA和分支ID中指定门票列表。因此,它们将自动从主干合并到特定分支。

有哪些选择可以实现?

1 个答案:

答案 0 :(得分:3)

如果您从提交消息中以一致的方式引用Jira票证,则使用Jira ABC-123票证号码格式,您可以通过搜索SVN日志获取修订列表。

svn log --search=FOO-57 http://.../svn/trunk

这将为您提供每个相关提交的日志消息和修订号。假设类似于unix的环境,你可以使用一些管道和shell操作将svn日志输出转换为修订版号列表,如下所示:

svn log --search=FOO-57 http://.../svn/trunk | grep ^r | cut '-d|' -f1 | sed s,r,,

稍微多一点shell操作可以用逗号分隔格式为您提供相同的修订列表:

REVISIONS=($(svn log --search=FOO-57 http://.../svn/trunk | grep ^r | cut '-d|' -f1 | sed s,r,,))
echo "${REVISIONS[*]}" | sed 's/ /,/g'

所以现在你可以只使用第二个命令的输出作为-c的{​​{1}}参数进行合并

svn merge

您可以将搜索字词和网址替换为REVISIONS=($(svn log --search=FOO-57 http://.../svn/trunk | grep ^r | cut '-d|' -f1 | sed s,r,,)) svn merge -c$(echo "${REVISIONS[*]}" | sed 's/ /,/g') http://.../svn/trunk "$1",将上述内容转换为可重复使用的shell脚本。或者,如果您想一次将其应用于多个Jira票证,您可以将整个事物包装在一个循环中,如下所示:

"$2"

如果您希望避免使用shell脚本来获取修订列表,则可以使用任何具有#!/bin/bash TRUNK_URL="http://.../svn/trunk" REVISIONS=($((for search_term in "$@"; do svn log --search="$search_term" "$TRUNK_URL" | grep ^r | cut '-d|' -f1 | sed s,r,,; done) | sort -u)) svn merge -c$(echo "${REVISIONS[*]}" | sed 's/ /,/g') "$TRUNK_URL" 绑定的语言来获得类似的结果。以下是使用Python和pysvn的示例:

libsvn