如何从GitLab项目获取特定提交

问题描述

我正在Visual Studio中使用Windows Forms C#开发(太新了)应用程序,我需要从GitLab项目中获取特定的提交。

我已经看到了许多有关GitHub的示例。我已经尝试过这种方式(不知道是否正确):

使用7位SHA1在特定提交时下载存储库:

 var Token = "xxxx";              
 var url = "http://{my_domain}/{user}/{project_name}/repository/archive/{shor_id}.zip";
 var path = @"C:\GitLab\My_Projects";

      try 
      {
         using (var client = new System.Net.Http.HttpClient())
         {
            var credentials = string.Format(System.Globalization.CultureInfo.InvariantCulture,"{0}:",Token);
            credentials = Convert.ToBase64String(System.Text.Encoding.ASCII.GetBytes(credentials));
            client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic",credentials);
            var contents = client.GetByteArrayAsync(url).Result;
            System.IO.File.WriteallBytes(path,contents);
         }
      }
      catch (System.UnauthorizedAccessException)
      {
            backgroundWorker1.CancelAsync();
            Console.WriteLine("Problem downloading");
      }

但是我得到这个错误

'System.UnauthorizedAccessException' in mscorlib.dll. Access denied to 'C:\GitLab\My_Projects'.

正如我之前所说,我是新来的,可能会说些愚蠢的事,对不起。 如果有人知道这个主题,我很乐意为您解释或帮助我解决这个问题。

解决方法

最后,我实现了解决方案。我使用GitLab API进行了另一个指导。 如果有人想看看我到达的结果,这里有代码:

var url_sha = $"http://{my_gitlab_domain}/api/v4/projects/{id_project}/repository/archive.zip? 
private_token={my_token}&sha={short_id_commit}";
var client = new HttpClient();
var response = await client.GetAsync(url_sha);
var local_path = @"C:\GitLab\My_Projects";

using (var stream = await response.Content.ReadAsStreamAsync())
{
     var fileInfo = new FileInfo(local_path + ".zip");
     using (var fileStream = fileInfo.OpenWrite())
     {
           await stream.CopyToAsync(fileStream);
     }
}