如何调试 Git LFS 推送失败?

How do I debug Git LFS push failures?

我有一个要迁移到 Azure DevOps 的存储库,该存储库使用 LFS 处理大文件。 LFS 中的文件范围从数百 KB 到数百 MB。尝试将此存储库推送到 Azure DevOps 中的新存储库时,推送会在某个文件处停止(即 3294/8278 files)。没有错误,它只是在该文件进度上停留了几个小时。其余的推送(包括推送 repo 本身)没有进行,因为它被这个文件故障阻止了。

我怎样才能确定是哪个文件导致了问题?我可以设置 LFS 来显示它当前正在尝试推送哪个文件吗?我能否仅推送文件子集以缩小导致问题的文件范围?

您可以通过在推送之前设置某些环境变量来调试 Git LFS,如下所示:GIT_TRACE=1 GIT_TRANSFER_TRACE=1 GIT_CURL_VERBOSE=1 git push REMOTE BRANCH(替换 REMOTEBRANCH)。 (请注意,该语法需要 POSIX shell。)

这将显示 headers 和正在发生的事情的响应,这可能有助于您排除故障。不过正常情况下,Git LFS 应该一次上传多个文件,所以不应该以这种方式被阻止。

请注意,上次我检查时,Azure DevOps 有一个错误,它在使用 HTTP/2 时无法处理超过一定大小(我认为是 128 MiB)的文件。由于 Azure Repos 的服务限制 more information about which can be found in this issue,这是 Azure Repos 的有意设计决定。您可能会发现这就是这里发生的事情,在这种情况下,您可以将 http.version 设置为 HTTP/1.1 以使事情正常工作。