我正在与GitLab合作,正在尝试解决提取文件信息的问题。我一直在试图解决这个问题,但我似乎找不到办法。我的环境是C#、. Net Core / Standard。这是我的要求和我尝试过的一些事情。
没有文件(或文件名)可以碰到我这边的磁盘。所有这些都必须驻留在内存中。
我需要能够从给定的路径拉出所有组/项目。我使用GitLab API-https://{0}/api/v4/groups/{1}/subgroups?per_page=100&page={2}
和https://{0}/api/v4/groups/{1}/projects?per_page=100&page={2}
解决了这个问题。
我需要能够提取那些项目的所有文件。我已经解决了这个问题,但是该解决方案确实不能接受。我从https://{0}/api/v4/projects/{1}/repository/tree?recursive=true&per_page=100{2}
撤出,我花了一些功夫来获取最大页面数,并对调用所有页面的调用进行了多线程处理。问题是我能够通过过多的线程使我们的GitLab屈膝,所以我必须节制。每页限制100个,我要拉的某些项目包含30万个文件,这是一个缓慢的过程。对于一个回购,仅需30分钟即可提取文件列表。
我需要提取单个文件。我已经使用https://{0}/api/v4/projects/{1}/repository/files/{2}/raw?ref={3}
解决了这个问题,并且效果很好。
我需要能够提取在给定日期/时间之后已更改(或添加)的文件列表,以便可以评估自上次通过以来的增量。我还没有完全解决这个问题,但是从目前为止我发现,我必须使用https://{0}/api/v4/projects/{1}/repository/commits?ref={2}&since={3}&per_page=100&page={4}
来获取自输入日期/时间以来的提交列表。然后,我将不得不使用https://{0}/api/v4/projects/{1}/repository/files/{2}?ref={3}
从步骤3中获取每个文件的元数据。这意味着我将不得不为每个文件进行调用,从而进一步增加了GitLab服务器的负载。
是否有更好的方法来解决#3和#5?
更新1
我尝试使用How do i get a list of all the files and their SHA1s from a remote Git repo?中概述的方法,但是出现了第二个登录提示,然后得到:The command you're trying to execute is not allowed.
是否需要在服务器端启用某些功能以允许此操作? / p>
更新2
更新1中的方法是“哑” http git协议。它在我们的基础架构中已禁用。我们正在使用智能HTTP协议。我一直在寻找,但是找不到使用智能HTTP协议进行git ls
的方法。有人举个例子吗?