2

我想知道是否可以从 GIT 存储库中只获取一个文件以便对其进行新的更改。我们想更改 Azure Devops 托管代理上的文件,但是下载整个 repo 需要很长时间,因为它很大。

我读过这些选项:

  1. --过滤选项 [ https://askubuntu.com/questions/460885/how-to-clone-git-repository-only-some-directories]
  2. Git 稀疏结帐(我不确定这是否仅在 GitHub 上可用)[ https://briancoyner.github.io/2013/06/05/git-sparse-checkout.html]
  3. 微软 GVFS [ https://github.com/Microsoft/VFSForGit]

过滤命令尝试

git clone --depth 1 --filter=sparse:path=ReadMe.md
警告:服务器无法识别过滤,忽略

稀疏结帐

git config core.sparsecheckout true
echo File.txt >> .git/info/sparse-checkout git pull origin master
但是它仍然检索了所有内容。

服务器存储库正在运行 GIT v2.18

  • 是否需要在服务器上进行配置才能使其正常工作?
  • --filter 选项是否仅在某些版本上可用?
  • GVFS 能否实现这一点,是否可以在托管代理上进行设置?

谢谢你。

4

2 回答 2

3
  1. 实际上,过滤方法不起作用。正如您链接的问题中进一步指出的那样:

    从 v2.19.0 开始没有服务器支持,但已经可以在本地进行测试。

  2. 稀疏检出仍将下载所有文件,只是不会将它们检出到磁盘。

  3. GVFS 需要更改服务器,并且仅受 Azure Repos 支持。它不是库存的一部分(您指出您的 Git 服务器是 2.18。)

正如 Shayki Abramczyk 所指出的,使用 REST API 可能是您的最佳选择。如果您的托管服务提供商支持它,您可以直接从托管服务提供商处下载文件。许多托管服务提供商也将允许您提交这些更改

于 2019-01-20T23:04:26.417 回答
2

从 Git 存储库下载一个文件的最佳方式是使用 Azure DevOps Rest API - Items - Get

GET https://dev.azure.com/{organization}/{project}/_apis/git/repositories/{repositoryId}/items?path={path}&api-version=5.0-preview.1

如果您添加参数download(例如:)?path={path}&download=true,文件将被下载到代理上。

因此,使用简单的 PowerShell 脚本(使用 )添加一个任务Invoke-RestMethod并获取文件。

于 2019-01-17T07:35:12.800 回答