Azure Devops Git - 按日期获取版本

Azure Devops Git - Get version by date

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

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

有什么方法可以使用 GitHttpClient 来实现吗?我需要生成一些趋势分析,获取特定日期的文件列表非常重要。如果没有按日期检索的功能,是否有解决方法?

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

而对于Git:对应的class为GitVersionDescriptor。 它只接受三个字段:branch, commit, tag。它不支持像 TfvcVersionDescriptor 那样的 Date 归档,我们无法控制这种行为,因为它是 SDK 的设计。

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

您对哪个日期感兴趣?

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

因为 git 被设计为分布式系统,提交与日期时间值没有明显的关系。有时 real-world 很乱,没有简单的答案。

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);

它将 return List<GitCommitRef>GitCommitRef.CommitId (SHA-1) 来识别提交。

然后使用 GitHttpClient.GetItemsAsync 或其他变体

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

获取文件。