致命:配置'protocol.version'的未知值:2

时间:2018-11-08 12:42:23

标签: git

我决定打开Git协议第二版(我想它更快,更安静),所以我做到了:

git config --global protocol.version 2

但是当我尝试

git pull

我收到一条错误消息:

fatal: unknown value for config 'protocol.version': 2

我的操作系统是Ubuntu 18.04。我在Ubuntu 16.04上的朋友做了同样的事情,并且对他有用。我可能会缺少一些依赖项吗?

3 个答案:

答案 0 :(得分:1)

此功能出现在Git 2.18

  

要自己尝试使用协议版本2,您需要一个最新版本的Git(对v2的支持最近已合并到Git的master分支中,并且有望成为Git 2.18的一部分)和一个启用v2的服务器(存储库)在googlesource.com和Cloud Source Repository上启用了v2)。

我有Git 2.17v

答案 1 :(得分:0)

config的Git手册(Git v2.20.1上的man git-config)说:

protocol.version
    Experimental. If set, clients will attempt to communicate with a server
    using the specified protocol version. If unset, no attempt will be made by
    the client to communicate using a particular protocol version, this results
    in protocol version 0 being used. Supported versions:

    ·   0 - the original wire protocol.

    ·   1 - the original wire protocol with the addition of a version string in
        the initial response from the server.

    ·   2 - wire protocol version 2[2].

所以2对于protocol.version来说不是有效值,您的朋友可能将其设置为1

答案 2 :(得分:0)

在Git 2.26(2020年第一季度)中,传输协议版本2(之前为I presented here)成为了默认版本
(它已在2.27中还原,但在2020年第四季度仍是Git 2.29的默认值:

请参见commit 684ceaecommit 33166f3commit 8a1b097commit b9ab170commit 07ef3c6Jonathan Nieder (artagnon)(2019年12月24日)。
(由Junio C Hamano -- gitster --commit 0da63da中合并,2020年2月14日)

config doc:protocol.version不是实验性的

签名人:乔纳森·尼德

Git的协议版本2在生产中已经运行了一年多。

通过不再将其称为实验性文件来简化文档。

并且:

fetch:默认为协议版本2

签名人:乔纳森·尼德

$ DAYJOB的Git用户已经使用协议v2作为默认协议已有1.5年了,其他人也一直在报告使用该协议的良好经验,因此似乎是改变默认版本的好时机。

当从具有很多引用(例如https://chromium.googlesource.com/chromium/src)的存储库中获取数据时,它会显着提高性能。

这只会影响客户端,而不会影响服务器。

(服务器已经默认支持协议v2。)
协议更改是向后兼容的,因此在联系仅讲协议v0的服务器时,这不会产生明显的影响。


警告:在Git 2.27(2020年第二季度)之前,那些从linux-next和其他内核存储库通过协议v2进行获取的人报告说,v2经常获取的内容超出了需要。

请参见commit 11c7f2aJonathan Nieder (artagnon)(2020年4月22日)。
(由Junio C Hamano -- gitster --commit e896a28中合并,2020年4月28日)

Revert "fetch:默认为协议版本2”

报告人:Lubomir Rintel
报告人:“ Ashutosh Dixit”
报告人:Jiri Slaby
报告人:康斯坦丁·里亚比特塞夫
签名人:乔纳森·尼德

这将还原commit 684ceae32dae726c6a5c693b257b156926aba8b7

从linux-next和其他内核远程服务器获取数据的用户报告说,有限的ref广告会导致协商到达MAX_IN_VAIN,,从而导致获取量太大。


在Git 2.29(2020年第四季度)中,传输协议v2再次成为默认协议。

请参见commit eb04975Jeff King (peff)(2020年9月25日)。
(由Junio C Hamano -- gitster --commit e76ae33中合并,2020年9月29日)

protocol:默认情况下重新启用v2协议

签名人:杰夫·金

协议v2通过684ceae32d在v2.26.0中成为默认值(“ fetch:默认为协议版本2”,2019-12-23,Git v2.26.0-rc0-{{3 }}列在merge中。

更广泛的使用导致谈判陷入衰退。在v2.27.0中,此问题已通过batch #5fetch-pack:在协议v2中,in_vain仅在ACK,2020年4月27日之后)得到修复,但我们还将默认值恢复为v0作为4fa3f00abb中的预防措施(还原“ fetch:默认为协议版本2”,2020-04-22)。

在v2.28.0中,我们使用11c7f2a30b(“ config:实验功能用户重新启用了该功能:let feature.experimental imply protocol.version = 2“,2020年5月20日,Git v2 .28.0-rc0-3697caf4b9中列出的merge),没有听到任何投诉。

v2.28仅仅发布了2个月,但我通常希望人们启用feature.experimental也能保持最新状态。因此,我们不太可能通过等待收集更多数据。此外,我们没有来自运行v2.26.0的人们的其他报告,当然,有些人已经设置了手动设置的协议协议年龄。

让我们再次使用v2作为默认设置。可能仍存在潜伏的错误,但直到它得到更广泛的使用,我们才知道。现在,我们可以像查找其他任何bug一样找到并压缩它们。

如果未设置,则默认值为2