At $DAY_JOB, we've noticed some pushes being larger than necessary. Here's a first step towards solving that. In this protocol change, we're allowing the user to specify an ancestor believed to be common; if the server agrees, the server sends that ancestor as the lone so-called ref being advertised instead of the full ref advertisement. Not only does this save bandwidth for the ref advertisement, but this avoids the issue of the server's refs being ahead of the client (and thus the client cannot use them since it is unaware of those objects). More information (including a design doc) can be found in the documentation patch. This works for file://, ssh://, and http(s)://. One last concern I had is the locations of the tests - I just bundled the protocol v0 ones with their corresponding protocol v1 ones, as I couldn't find good places to put them. Jonathan Tan (4): connect: refactor building of Extra Parameters push: teach --base for ssh:// and file:// remote-curl: teach --base for http(s):// Doc: push with --base Documentation/gitremote-helpers.txt | 8 ++ Documentation/technical/pack-protocol.txt | 10 +- Documentation/technical/push-with-base.txt | 61 ++++++++++++ builtin/fetch-pack.c | 2 +- builtin/push.c | 12 ++- builtin/receive-pack.c | 46 ++++++++- builtin/send-pack.c | 2 +- builtin/upload-pack.c | 2 +- connect.c | 39 +++++--- connect.h | 4 +- http-backend.c | 2 +- protocol.c | 5 +- protocol.h | 5 +- remote-curl.c | 25 +++-- t/t5700-protocol-v1.sh | 110 +++++++++++++++++++++ transport-helper.c | 15 +++ transport.c | 14 ++- transport.h | 9 ++ 18 files changed, 332 insertions(+), 39 deletions(-) create mode 100644 Documentation/technical/push-with-base.txt -- 2.29.1.341.ge80a0c044ae-goog