获取从TeamFoundation.SourceControl.WebApi客户端收到的GIT提交者/作者的主身份



我们正在创建一个应用程序,用于收集特定人员在给定月份所做的提交并存档它们。

为此,将使用TeamFoundation.SourceControl.WebApi命名空间中的 TFS 客户端。在查找所做的更改时,它运行良好(它同时查找 TFS 和 GIT 更改),但某些结果详细信息(特别是 GIT 结果和GitUserDate类)存在一些麻烦。结果似乎具有本地指定的 GIT 用户名。由于这些是不可靠的,我们需要将它们映射到向服务器进行最终提交的用户的实际域名。一般来说,每次提交应该只有一个作者(在提交到服务器之前,有人有多个作者在本地存储库上工作的可能性非常小)。

我知道此信息应该在 TFS 中;TFS SQL 数据库中有一个IdentityMap表,它似乎保存了我们正在寻找的信息。但我们宁愿通过 API 获取这些信息,因为直接访问数据库感觉......错。

有没有办法从 TFS API 获取此信息?

附言。为了完整起见:我们使用的是本地 TFS。

编辑:这是一个代码示例:

var criteria = new GitQueryCommitsCriteria();
criteria.FromDate = startDate.ToString();
criteria.ToDate = endDate.ToString();
var commits = gitClient.GetCommitsBatchAsync(criteria, repository.Id).Result;
var itemList = new List<GitFile>();
if (commits.Select(x => x.Committer.Name).Count(x => users.Contains(x)) > 0)
{
foreach (var commit in commits)
{
var changes = gitClient.GetChangesAsync(commit.CommitId, repository.Id).Result;
foreach (var change in changes.Changes)
{
if (change.Item.GitObjectType == GitObjectType.Blob)
{
var item = new GitFile  //this is a custom model class to help processing
{
Committer = commit.Committer.Name, //commit.Committer.Email was also attempted
Date = commit.Committer.Date,
RepositoryId = repository.Id,
RepositoryName = repository.Name,
FileName = change.Item.Path,
Item = change.Item
};
itemList.Add(item);
}
}
}
if (itemList.Count > 0)
{
ProcessGitFiles(itemList, startDate, users);    //users is a list of internal user domain names for whom files needed to be processed and saved
}
}

一些错误的例子:users列表包含来自服务器的域名,这是我们可以依赖的。Commiter.Name(或Commiter.Email)是某人git config指定的本地值,至少在一种情况下,名称包含拼写错误,而在其他情况下,电子邮件是别名电子邮件地址(通常我们公司的用户会使用格式jdoe@domain但电子邮件也有别名格式john.doe@domain)。

最简单的方法是使用推送而不是提交。 提交只是 Git 跟踪提交的信息的记录。 推送和/或拉取请求具有创建它们的人的基于 TFS 用户的标识。

最新更新