Azure Devops Git-按日期获取版本

问题描述

最近,我从TFVC转到了Git版本控件。到目前为止,我一直在使用TfvcVersionDescriptor日期类型来获取特定日期的文件项:

var version = new TfvcVersionDescriptor { VersionType = TfvcVersionType.Date,Version = date };

有什么办法可以使用GitHttpClient做到这一点?我需要生成一些趋势分析,获取特定日期的文件列表非常重要。如果没有按日期检索的功能,是否可以解决此问题?

解决方法

对于TFVC::您已经使用TfvcVersionDescriptor很长时间了。

对于Git::对应的类是GitVersionDescriptor。 它仅接受三个字段:branch,commit,tag。它不像Date一样支持TfvcVersionDescriptor归档,由于它是SDK的设计,因此我们无法控制此行为。

(您可以从SDK here添加有关修改GitVersionType枚举的功能请求)

,

您对哪个日期感兴趣?

  • 原始作者写补丁GitCommit.Author.GitUserDate.Date
  • 创建此提交对象时GitCommit.Committer.GitUserDate.Date
  • 创建/推送请求时
  • 该分支的更新时间

由于git被设计为分布式系统,因此commit与datetime值之间没有明显的关系。有时,现实世界很凌乱,没有一个简单的答案。

,

GitHttpClient.GetCommitsAsync与类似的GitQueryCommitsCriteria对象一起使用

GitQueryCommitsCriteria searchCriteria = new GitQueryCommitsCriteria()
{
    FromDate = new DateTime(2019,2,2).ToString(),ToDate = DateTime.Now.ToString(),ItemVersion = new GitVersionDescriptor()
    {
        Version = "master",VersionType = GitVersionType.Branch
    }
};
var commits = await client.GetCommitsAsync(repo.Id,searchCriteria);

它将返回List<GitCommitRef>GitCommitRef.CommitId(SHA-1)来标识提交。

然后将GitHttpClient.GetItemsAsync或其他变体与

一起使用
new GitVersionDescriptor()
{
    VersionType = GitVersionType.Commit,Version = commitId // value from above
};

获取文件。