合并TFS检查策略以获取正确的文件名

时间:2018-07-26 13:56:53

标签: tfs tfvc checkin-policy

上下文:某些开发人员在检入其代码之前未维护正确的命名约定。因此,构建过程不会拾取这些工件,因此依赖关系被破坏,并在目标服务器上部署后导致失败。例如,包含db函数GetMaxId()的文件应具有类似GetMaxId.Function.Ora.Sql

的命名约定。

要求:是否可以为此实施任何签入策略,以便开发人员可以在签入之前通知该问题。在此过程中,我们可以节省大量时间和精力。

2 个答案:

答案 0 :(得分:0)

没有这样的现有签入策略,但是您可以应用Check-in Notes来在签入之前将问题告知开发人员。

导航到 Team Explorer-Home -> 设置-> 源代码控制-> 添加签到便笺

  • 设置标题,例如:Please make sure maintain proper naming conventions before check in
  • 启用 Required on check-ins

因此,系统将阻止开发人员在不输入注释的情况下签入更改,并且标题将提示开发人员在签入之前保持适当的命名约定。一旦验证,然后输入注释并签入更改。 ..

enter image description here

答案 1 :(得分:0)

是的,可以使用将在Visual Studio中运行的TFVC签入策略来实现。这是一个需要部署到每个客户端的自定义dll。签入策略只是用户打开签入等待更改窗口时将运行的一段代码。

对于需要支持的每个Visual Studio版本,您都需要一个策略程序集。 The right set of framework libraries etc can be found here

您需要重写Evaluate方法以实施检查。您可以通过this.PendingCheckin.PendingChanges...访问选定的未决更改列表。下面是一个策略示例,该策略查看选中要检入的文件:

public override PolicyFailure[] Evaluate()
{
    if (PendingCheckin.PendingChanges.AffectedTeamProjectPaths.Length > 1)
    {
        return new[]{new PolicyFailure("Checking into multiple projects at the same time", this)};
    }
    var branches = this.PendingCheckin.PendingChanges.Workspace.VersionControlServer
        .QueryRootBranchObjects(RecursionType.Full);
    var groupedChanges = PendingCheckin.PendingChanges.CheckedPendingChanges.GroupBy(
       change => branches.SingleOrDefault(branch => change.ServerItem.StartsWith(branch.Properties.RootItem.Item)));
    if (groupedChanges.Count() > 1)
    {
       return new[]{new PolicyFailure("Checking into multiple branches at the same time", this)};
    }
    return new PolicyFailure[0];
}

您需要对要与文件名匹配的文件进行自己的解析,或者依靠另一个库来为您完成解析。 Checkin策略框架仅使您可以访问文件的路径。

如果要解析文件,您可能会需要一些缓存。

A sample policy can be found here