我决定打开Git协议第二版(我想它更快,更安静),所以我做到了:
git config --global protocol.version 2
但是当我尝试
git pull
我收到一条错误消息:
fatal: unknown value for config 'protocol.version': 2
我的操作系统是Ubuntu 18.04。我在Ubuntu 16.04上的朋友做了同样的事情,并且对他有用。我可能会缺少一些依赖项吗?
答案 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 684ceae的commit 33166f3,commit 8a1b097,commit b9ab170,commit 07ef3c6,Jonathan 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 11c7f2a的Jonathan 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 eb04975的Jeff 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 #5(
fetch-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
。