我正尝试从我从Azure DevOps NuGet客户端库获取的提交记录中下载早期版本的存储库版本(.csproj文件)。我想要执行此操作,以便可以访问.csproj文件中的程序集版本信息。我用来获取文件当前版本的GetFile()函数工作正常,但我想从提交记录中下载文件的旧版本。
这是GetFile函数。
public string GetFile(string projectName, string repoName, string fileName)
{
try
{
var items = ListItems(projectName, repoName);
var projectPath = items.FirstOrDefault(i => i.Path.Contains(fileName))?.Path ?? "";
GitHttpClient gitClient = GetGitHttpClient();
GitRepository repo = GetRepositoryAsync(projectName, repoName);
var stream = gitClient.GetItemTextAsync(repo.Id, projectPath).Result;
var reader = new StreamReader(stream);
return reader.ReadToEnd();
}
catch (Exception e)
{
return "";
}
}
此函数获取提交。
public async Task<List<GitCommitRef>> GetCommitsAsync(string projectName, string repoName)
{
var client = GetGitHttpClient();
var repo = GetRepositoryAsync(projectName, repoName);
var gitQueryCommitsCriteria = new GitQueryCommitsCriteria();
return await client.GetCommitsAsync(repo.Id, gitQueryCommitsCriteria);
}
现在,我想下载与每个提交相关的.csproj的每个版本。
任何人都可以给我的帮助将不胜感激。
亲切的问候,斯图尔特
答案 0 :(得分:0)
我用来获取当前版本的GetFile()函数 文件工作正常,但我想下载文件的旧版本 从提交记录中。
我认为您的方向正确。我曾经使用Azure Devops Rest Api
Items-Get在versionDescriptor
参数的帮助下成功获取一个特定版本文件的内容。
https://dev.azure.com/MyOrgName/MyProjectName/_apis/git/repositories/MyReposName/Items?path=/README.md&versionDescriptor%5BversionOptions%5D=0&versionDescriptor%5BversionType%5D=2&versionDescriptor%5Bversion%5D={Commit ID}&download=true&resolveLfs=true&%24format=octetStream&api-version=5.0-preview.1
由于客户端库中可用的功能与 Rest Api中的功能相对应,因此客户端库必须具有相应的参数才能执行此操作。
这是我发现的东西:
gitClient.GetItemTextAsync()
函数的大多数重载都以GitVersionDescriptor versionDescriptor = null
作为输入,我认为这是您所需要的。
希望它会有所帮助。