Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在BitBucket中强制(拉请求)合并提交消息的格式_Bitbucket - Fatal编程技术网

如何在BitBucket中强制(拉请求)合并提交消息的格式

如何在BitBucket中强制(拉请求)合并提交消息的格式,bitbucket,Bitbucket,我们的团队正在迁移到BitBucket。对于合并到主源repo中的代码,我们的工作流要求提交消息的某些格式 每个开发人员都有一个(或多个)分支。我们的工作流程是将一个特性/错误分支推送到fork,并从该分支创建一个pull请求。在合并请求之前,另外两个开发人员必须检查并+1拉请求 当有人单击“合并”时,BitBucket会显示一个标题为“合并请求”的对话框。此时,开发人员可以在单击第二个合并按钮之前编辑为合并记录的文本消息。这是需要符合特定格式的消息 我已经阅读了这里的文档:它有几个非常具体的示

我们的团队正在迁移到BitBucket。对于合并到主源repo中的代码,我们的工作流要求提交消息的某些格式

每个开发人员都有一个(或多个)分支。我们的工作流程是将一个特性/错误分支推送到fork,并从该分支创建一个pull请求。在合并请求之前,另外两个开发人员必须检查并+1拉请求

当有人单击“合并”时,BitBucket会显示一个标题为“合并请求”的对话框。此时,开发人员可以在单击第二个合并按钮之前编辑为合并记录的文本消息。这是需要符合特定格式的消息

我已经阅读了这里的文档:它有几个非常具体的示例,但没有任何与我们的用例相关的内容。对于如何创建合并检查,我还没有找到一个好的、通用的参考

我可以编写一个条件来检查特定的字符串值:

mergeRequest.message == "My Message"
但我需要它来检查正则表达式。 如果消息不符合正则表达式,如何编写预合并挂钩来拒绝合并

添加

从文档中可以看出,条件检查脚本代码似乎是执行此条件的正确位置。可以在
存储库设置>SCRIPTRUNNER>脚本合并检查>条件合并检查中添加脚本。下面列出了一长串用于条件合并检查的示例,包括:

  • 特定组中的当前用户
  • 更改的文件包含.XYZ文件
  • 已更改敏感目录中的文件
  • 目标分支正在释放

经过一些搜索和实验,我发现我可以根据提交消息阻止合并。但到目前为止,我只找到了将整个字符串与常量字符串表达式进行比较的示例。在这个比较中,我还没有找到如何使用正则表达式。

您可以尝试一些类似YACC的Bitbucket插件:

如果这不符合您的要求,您可以编写自己的:

将此问题搁置几周后,请点击此处。问题解决了。您可以根据正则表达式检查合并提交消息,而无需使用插件。对于那些带着同样问题来搜索的人来说,解决方案就在这里

首先,找到与编写合并检查脚本最相关的对象的文档比应该的更具挑战性。下面是当前6.3.0 API的几个链接:

  • -最后,我的脚本没有使用此对象,但拉请求与合并请求密切相关,其他人可能需要文档

  • -此对象具有确定上下文的方法(见下文)

其次,合并检查脚本在两种不同的上下文中触发:(1)当bitbucket试图确定是否应启用/禁用Pull Request页面上的Merge按钮时,以及(2)当有人单击Merge Pull Request对话框上的Merge按钮时。在第一个上下文中,合并消息为null,因此它不能与正则表达式匹配。无论如何,在这种情况下禁用按钮是没有意义的。我真的只想在第二个上下文中进行检查。因此,脚本需要一种区分上下文的方法

第三,消息对象是,因此脚本可以调用
matches()
方法来检查消息是否匹配正则表达式

在掌握了所有信息后,编写脚本非常简单:

// the message regex
String pattern = "(PATTERN1|PATTERN2|etc)"
// reject if not dry-run and
//           message doesn't match regex
! mergeRequest.isDryRun() &&
    ! mergeRequest.message.matches(pattern)

那么,您是说有必要使用插件来检查合并提交消息是否与正则表达式匹配?编写一个插件似乎是一个比我预期的更大的解决方案。希望不会达到这个目的。你可能会在YACC维护者那里发现一个问题:我使用了File Hooks插件,但它不再被维护,因此由于不推荐使用的api,我不得不更新插件。这是一个向第三方支付大量资金、向现有插件开发人员求情或自己动手的案例。