Avoid fetching every branch of a new remote in a shallow repo.
Changes in v6:
* Remove leftover reference to deleted default-branch logic in commit
message.
Changes in v5:
* Renumber test file from t5585 to t5586.
Changes in v4:
* Removed the automatic default-branch fetch. A fresh remote fetches
nothing until you track a branch explicitly.
* Fixed fetch report showing "new ref HEAD" instead of "new branch "
* Reworded remote..refmap docs and commit message.
Changes in v3:
* Replace the special ":"/"+:" fetch refspec with remote.<name>.refmap,
reusing git's existing --refmap mechanism instead of inventing new
refspec syntax.
* Split the change into 4 commits.
Changes in v2:
* Replaced the opt-in fetch.shallow config entirely with a new special
fetch refspec (+:) that git remote add now defaults new remotes to in a
shallow repository. The new refspec fetches whichever branches any local
branch tracks at that remote, plus the remote's default branch.
Harald Nordgren (4):
fetch: add remote.<name>.refmap
fetch: infer branches to fetch from a refmap-only remote
remote: add "git remote add --limited-fetch"
remote: default to --limited-fetch in a shallow repository
Documentation/config/remote.adoc | 8 +++
Documentation/fetch-options.adoc | 5 ++
Documentation/git-remote.adoc | 14 +++-
builtin/fetch.c | 60 +++++++++++++---
builtin/remote.c | 31 ++++++--
remote.c | 41 ++++++++++-
remote.h | 9 +++
t/meson.build | 1 +
t/t5505-remote.sh | 76 ++++++++++++++++++++
t/t5510-fetch.sh | 17 +++++
t/t5586-fetch-refmap.sh | 119 +++++++++++++++++++++++++++++++
11 files changed, 363 insertions(+), 18 deletions(-)
create mode 100755 t/t5586-fetch-refmap.sh
base-commit: c46c1e37724f0478939de636ab8ea5a89086d532
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-2412%2FHaraldNordgren%2Ffetch-shallow-narrow-refspec-v6
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-2412/HaraldNordgren/fetch-shallow-narrow-refspec-v6
Pull-Request: https://github.com/git/git/pull/2412
Range-diff vs v5:
1: d48a7004e4 = 1: 5c31a51bb7 fetch: add remote.<name>.refmap
2: fecdbc43b8 = 2: 74c177e3e2 fetch: infer branches to fetch from a refmap-only remote
3: b45f3cf0ab ! 3: 3abcc8915b remote: add "git remote add --limited-fetch"
@@ Commit message
Give "git remote add" a --limited-fetch option that sets up
remote.<name>.refmap instead of remote.<name>.fetch, so that
- "git fetch <name>" only fetches the branches already tracked, plus
- the remote's default branch, as described in the previous commit.
- It is rejected together with -t/--track or --mirror, since those
- already say explicitly what to fetch.
+ "git fetch <name>" only fetches the branches already tracked, as
+ described in the previous commit. It is rejected together with
+ -t/--track or --mirror, since those already say explicitly what to
+ fetch.
Signed-off-by: Harald Nordgren <haraldnordgren@gmail.com>
4: 8c2a144eb7 = 4: 84d192445c remote: default to --limited-fetch in a shallow repository