使用 .Net Framework v4.8 和 Visual Studio 2019 查询 TFS 2015 源代码存储库日期时间属性

Querying TFS 2015 Source Code Repository DateTime Properties with .Net Framework v4.8 and Visual Studio 2019

我正在尝试筛选在特定时间段内在特定 Team Foundation Server 2015 分支上创建或修改的源代码控制文件。到目前为止,我能够使用 Microsoft.VisualStudio.Services.WebAPI 和 Microsoft.TeamFoundation.SourceControl.WebApi 库以及使用 GitHttpClient class 的 C# .Net Framework 4.8 控制台应用程序访问文件属性(例如 url)。 =12=]

此 class return 的 GetItemsAsync() 方法是 "GitItems" 的列表,其中包含可以作为参数传递的 "path" 属性进入 System.IO class FileInfo 来实例化一个具有我需要的属性的对象:CreationTime 和 LastWriteTime。但是,GitItem 对象不包含 FileInfo(以及 class 文件)准确生成这些属性所需的完整文件 (blob) 路径。路径 属性 仅包含文件名(例如“/.gitignore”)。因此,在下面的代码中,变量 lastWriteTime 和 CreationTime 属性 都 return '12/31/1600 7:00:00 PM',因为无法识别路径。

    static void Main(string[] args)
    {
        VssCredentials creds = new VssClientCredentials();
        creds.Storage = new VssClientCredentialStorage();

        VssConnection connection = new VssConnection(new Uri(teamCollection), creds);

        // Get a GitHttpClient to talk to the Git endpoints
        GitHttpClient gitClient = connection.GetClient<GitHttpClient>();

        // Get data about a specific repository
        var repositories = gitClient.GetRepositoriesAsync(teamProject).Result;

        GitVersionDescriptor descriptor = new GitVersionDescriptor()
        {
            VersionType = GitVersionType.Branch,
            Version = "develop",
            VersionOptions = GitVersionOptions.None
        };

        foreach (var repository in repositories)
        {

            var branches = gitClient.GetBranchesAsync(repository.Id).Result;
            var items = gitClient.GetItemsAsync(repository.Id, recursionLevel: VersionControlRecursionType.Full, versionDescriptor: descriptor, includeContentMetadata: true).Result;

            foreach (var item in items)
            {
                var fullPath = Path.GetFullPath(item.Path);
                FileInfo file = new FileInfo(fullPath);
                DateTime lastWriteTime = file.LastWriteTime;
            }
            Console.WriteLine(repository.Name);
        }
    }
}

}

根据您的代码,您正在使用 GitHttpClient.GetItemsAsync 方法。

public Task<GitItemsCollection> GetItemsAsync(
    Guid repositoryId,
    string path,
    GitVersionDescriptor version,
    VersionControlRecursionType recursionLevel,
    bool includeContentMetadata,
    bool includeLatestChange,
    Object userState
)

这将 return 服务器端 git 路径。具有 LastWriteTime 属性的文件信息 class 获取或设置上次写入当前文件或目录的时间。这应该是本地系统路径。

这就是无法识别路径的原因。这可能 return 日期类型为“12/31/1600 7:00:00 下午”,

您的问题与此类似VSTS API - repository creation date

Don't think it is possible to get the exact date of the moment the operation create repo was completed. However, logically the birthday of the repository is usually considered its first commit date.

If that's what you're looking for, you can achieve your goal with a usual Git command:

git log -1 --reverse --format="format:%ci"

此外,您还可以通过 Rest API. Also take a look at this blog 获得包含详细信息的 git 提交,这可能会有所帮助。