0

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

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

4

2 回答 2

0

没有这样的现有签入政策,但是您可以Check-in Notes在签入前应用 通知开发人员有关问题。

导航到Team Explorer-Home --> Settings --> Source Control --> Add a check-in note,

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

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

在此处输入图像描述

于 2018-07-27T06:15:49.727 回答
0

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

对于需要支持的每个 Visual Studio 版本,您都需要一个策略程序集。可以在这里找到正确的框架库等

您需要重写该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 策略框架只允许您访问文件的路径。

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

可以在此处找到示例策略

于 2018-07-27T06:41:15.533 回答