GIT - 无法克隆或拉取存储库(错误输出)

GIT - cannot clone or pull repository (error output)

我对 cloning/pulling 一些 GIT 存储库有疑问。大多数存储库工作正常,但最大的一个(提交计数 - 我们将我们两年前的 tfs 项目转换为 GIT 个存储库)不工作。

克隆错误:

git -c filter.lfs.smudge= -c filter.lfs.required=false -c diff.mnemonicprefix=false -c core.quotepath=false --no-optional-locks clone --branch master PROJECTPATHPLACEHOLDER.git C:\Workspace\GIT\PROJECTNAME Cloning into 'C:\Workspace\GIT\PROJECTNAME'... error: RPC failed; curl 56 Recv failure: Connection was reset fatal: error reading section header 'shallow-info'

拉取错误:

RPC failed; curl 56 Recv failure: Connection was reset Git failed with a fatal error. error reading section header 'acknowledgments'

我尝试 google 可能的解决方案,但 none 有所帮助(增加 http.postbuffer,不同的版本)。 我尝试了 GIT 的不同版本(2.21、2.27、2.29),git 的不同环境(GIT cmd,Microsoft Visual Studio Professional 2019 版本 16.8.0,Sourcetree 3.3 .9) 具有相同的错误输出。
我们使用 BitBucket 服务器作为 git 服务器。 我的配置是笔记本,win10 pro,远程vpn。

我很乐意提供任何帮助。 谢谢, 卢卡什·瓦舍克

Ps。如有不明之处,请向我说明。

考虑到任何与浅层信息相关的信息都来自 Git 2.18, Q2 2019 (commit 685fbd32916f3e94bc89aa14e8fdce835b06f801),也许较旧的 Git 会完全忽略该 header 部分。

如果不能,我会首先检查该存储库是否可以在任何其他环境中克隆(意思是在 Linux 机器上,仍然通过 VPN 访问,但在公司网络本地)


请注意,在某些情况下,此错误消息可能会随着 Git 2.37(2022 年第三季度)消失:

"git fetch"(man) 在输出中出现意外的可选部分时不必要地失败,已使用 Git 2.37(2022 年第 3 季度)更正。

参见 commit 7709acf (16 May 2022) by Jonathan Tan (jhowtan)
(由 Junio C Hamano -- gitster -- in commit 9cf4e0c 合并,2022 年 5 月 25 日)

fetch-pack: make unexpected peek result non-fatal

Signed-off-by: Jonathan Tan

When a Git server responds to a fetch request, it may send optional sections before the packfile section.
To handle this, the Git client calls packet_reader_peek() (see process_section_header()) in order to see what's next without consuming the line.

However, as implemented, Git errors out whenever what's peeked is not an ordinary line.
This is not only unexpected (here, we only need to know whether the upcoming line is the section header we want) but causes errors to include the name of a section header that is irrelevant to the cause of the error.

For example, at $DAYJOB, we have seen "fatal: error reading section header 'shallow-info'" error messages when none of the repositories involved are shallow.

Therefore, fix this so that the peek returns 1 if the upcoming line is the wanted section header and nothing else.
Because of this change, reader->line may now be NULL later in the function, so update the error message printing code accordingly (expected '%s', received '%s' or expected '%s').

我们找到了该问题的解决方案。 VPN 防火墙 (checkPoint) 上有某种过滤器,有时会阻止 git http 请求。

我使用以下命令解决了同样的问题:

git clone --depth 20 <repo>

参考:

https://git-scm.com/docs/shallow

更多相关信息:

git shallow clone (clone --depth) misses remote branches

根据网络配置,通过 HTTPS 克隆可能会失败并出现错误:正在阅读部分 header 'shallow-info'。我有一个类似的场景:Bitbucket + Git 由 SVN 转换而来的存储库,历史悠久。

我设法使用 SSH 克隆了存储库。起初,它是挂着的。要修复它,我必须在 运行 垃圾 collection:

之后重新上传存储库
  • git fsck
  • git gc --prune="0 天"

不过,通过 HTTPS 克隆仍然失败。