git-commit-vandalism/Documentation/technical
Jonathan Tan 59e1205d16 ls-refs: report unborn targets of symrefs
When cloning, we choose the default branch based on the remote HEAD.
But if there is no remote HEAD reported (which could happen if the
target of the remote HEAD is unborn), we'll fall back to using our local
init.defaultBranch. Traditionally this hasn't been a big deal, because
most repos used "master" as the default. But these days it is likely to
cause confusion if the server and client implementations choose
different values (e.g., if the remote started with "main", we may choose
"master" locally, create commits there, and then the user is surprised
when they push to "master" and not "main").

To solve this, the remote needs to communicate the target of the HEAD
symref, even if it is unborn, and "git clone" needs to use this
information.

Currently, symrefs that have unborn targets (such as in this case) are
not communicated by the protocol. Teach Git to advertise and support the
"unborn" feature in "ls-refs" (by default, this is advertised, but
server administrators may turn this off through the lsrefs.unborn
config). This feature indicates that "ls-refs" supports the "unborn"
argument; when it is specified, "ls-refs" will send the HEAD symref with
the name of its unborn target.

This change is only for protocol v2. A similar change for protocol v0
would require independent protocol design (there being no analogous
position to signal support for "unborn") and client-side plumbing of the
data required, so the scope of this patch set is limited to protocol v2.

The client side will be updated to use this in a subsequent commit.

Signed-off-by: Jonathan Tan <jonathantanmy@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2021-02-05 13:49:53 -08:00
..
.gitignore
api-error-handling.txt
api-index-skel.txt
api-index.sh
api-merge.txt merge: move doc to ll-merge.h 2019-11-18 15:21:28 +09:00
api-parse-options.txt strvec: update documention to avoid argv_array 2020-07-28 15:02:18 -07:00
api-trace2.txt usage: add trace2 entry upon warning() 2020-11-24 17:39:38 -08:00
bitmap-format.txt
bundle-format.txt bundle: add new version for use with SHA-256 2020-07-30 09:16:48 -07:00
commit-graph-format.txt Merge branch 'tb/bloom-improvements' 2020-09-29 14:01:20 -07:00
commit-graph.txt docs: commit-graph: fix some whitespace in the diagram 2020-08-13 11:06:04 -07:00
directory-rename-detection.txt t6423: more involved rules for renaming directories into each other 2020-10-16 12:29:28 -07:00
hash-function-transition.txt docs: fix step in transition plan 2020-08-13 18:09:55 -07:00
http-protocol.txt http-protocol.txt: document SHA-256 "want"/"have" format 2020-08-17 10:35:12 -07:00
index-format.txt Merge branch 'jh/index-v2-doc-on-fsmn' 2020-12-17 15:06:42 -08:00
long-running-process-protocol.txt
multi-pack-index.txt Merge branch 'jb/midx-doc-update' 2020-12-17 15:06:41 -08:00
pack-format.txt Merge branch 'ds/sha256-leftover-bits' 2020-08-19 16:14:53 -07:00
pack-heuristics.txt
pack-protocol.txt Merge branch 'jx/proc-receive-hook' 2020-09-25 15:25:39 -07:00
packfile-uri.txt Documentation: add Packfile URIs design doc 2020-06-10 18:06:34 -07:00
partial-clone.txt promisor-remote: lazy-fetch objects in subprocess 2020-08-18 16:46:53 -07:00
protocol-capabilities.txt docs: new capability to advertise session IDs 2020-11-11 18:26:52 -08:00
protocol-common.txt
protocol-v2.txt ls-refs: report unborn targets of symrefs 2021-02-05 13:49:53 -08:00
racy-git.txt doc: replace LKML link with lore.kernel.org 2019-12-04 10:26:52 -08:00
reftable.txt reftable: define version 2 of the spec to accomodate SHA256 2020-06-09 13:48:36 -07:00
repository-version.txt
rerere.txt Documentation: fix a bunch of typos, both old and new 2019-11-07 13:42:00 +09:00
send-pack-pipeline.txt
shallow.txt shallow.txt: document SHA-256 shallow format 2020-08-17 10:35:13 -07:00
signature-format.txt
trivial-merge.txt