背景:一些开发人员在签入代码之前没有维护正确的命名约定。因此,这些工件不会被构建过程拾取,因此依赖关系被破坏并在目标服务器上部署后导致失败。例如,包含 db 函数的文件GetMaxId()
应具有如下命名约定GetMaxId.Function.Ora.Sql
要求:是否可以为此实施任何签入策略,以便开发人员可以在签入前通知问题。在此过程中,我们可以节省大量时间和精力。
背景:一些开发人员在签入代码之前没有维护正确的命名约定。因此,这些工件不会被构建过程拾取,因此依赖关系被破坏并在目标服务器上部署后导致失败。例如,包含 db 函数的文件GetMaxId()
应具有如下命名约定GetMaxId.Function.Ora.Sql
要求:是否可以为此实施任何签入策略,以便开发人员可以在签入前通知问题。在此过程中,我们可以节省大量时间和精力。
没有这样的现有签入政策,但是您可以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
因此,系统将阻止开发人员在未输入注释的情况下签入更改,并且标题将提示开发人员在签入前保持正确的命名约定。一旦验证,然后输入注释并签入更改...
是的,这可以使用将在 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 策略框架只允许您访问文件的路径。
如果要解析文件,您可能需要一些缓存。