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

时间:2019-06-12 13:15:26

标签: git tfs

我们正在创建一个应用,该应用可收集特定人员在给定月份内所做的提交并将其存档。

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

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

是否可以从TFS API获取此信息?

PS。为了完整起见:我们使用的是本地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格式)。

1 个答案:

答案 0 :(得分:0)

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