Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
73 commits
Select commit Hold shift + click to select a range
d0abfb0
shallow: free local object_array allocations
spog Feb 15, 2026
3ef68ff
shallow: handling fetch relative-deepen
spog Feb 15, 2026
18e71bb
gitweb: add viewport meta tag for mobile devices
ritorhymes Feb 16, 2026
5be380d
gitweb: prevent project search bar from overflowing on mobile
ritorhymes Feb 16, 2026
fd10720
gitweb: fix mobile page overflow across log/commit/blob/diff views
ritorhymes Feb 16, 2026
34108d7
gitweb: fix mobile footer overflow by wrapping text and clearing floats
ritorhymes Feb 16, 2026
f4e63fd
gitweb: let page header grow on mobile for long wrapped project names
ritorhymes Feb 16, 2026
cb18484
wt-status: avoid passing NULL worktree
phillipwood Feb 19, 2026
a49cb0f
path: remove repository argument from worktree_git_path()
phillipwood Feb 19, 2026
3e9cc24
osxkeychain: define build targets in the top-level Makefile.
KojiNakamaru Feb 20, 2026
999b093
mailmap: stop using the_repository
bkkaracay Feb 20, 2026
6aea51b
mailmap: drop global config variables
bkkaracay Feb 20, 2026
02a0d29
Merge branch 'lo/repo-info-keys' into lo/repo-leftover-bits
gitster Feb 20, 2026
0fbf380
apply: normalize path in --directory argument
joaquimrocha Feb 18, 2026
1e50d83
tree-diff: remove the usage of the_hash_algo global
shreyp135 Feb 20, 2026
84325f0
merge,diff: remove the_repository check before prefetching blobs
newren Feb 21, 2026
4f8108b
merge-ort: pass repository to write_tree()
newren Feb 21, 2026
b54590b
merge-ort: replace the_repository with opt->repo
newren Feb 21, 2026
5eae39b
merge-ort: replace the_hash_algo with opt->repo->hash_algo
newren Feb 21, 2026
5925722
merge-ort: prevent the_repository from coming back
newren Feb 21, 2026
3249d07
replay: prevent the_repository from coming back
newren Feb 20, 2026
25ede48
config: move show_all_config()
derrickstolee Feb 23, 2026
12210d0
config: add 'gently' parameter to format_config()
derrickstolee Feb 23, 2026
1ef1f9d
config: make 'git config list --type=<X>' work
derrickstolee Feb 23, 2026
d744923
config: format int64s gently
derrickstolee Feb 23, 2026
53959a8
config: format bools gently
derrickstolee Feb 23, 2026
5fb7bdc
config: format bools or ints gently
derrickstolee Feb 23, 2026
9c7fc23
config: format bools or strings in helper
derrickstolee Feb 23, 2026
bcfb912
config: format paths gently
derrickstolee Feb 23, 2026
9cb4a5e
config: format expiry dates quietly
derrickstolee Feb 23, 2026
db45e49
color: add color_parse_quietly()
derrickstolee Feb 23, 2026
2d4ab5a
config: format colors quietly
derrickstolee Feb 23, 2026
645f92a
config: restructure format_config()
derrickstolee Feb 23, 2026
096aa60
config: use an enum for type
derrickstolee Feb 23, 2026
09505b1
t: fix races caused by background maintenance
pks-t Feb 24, 2026
5e6c612
t: disable maintenance where we verify object database structure
pks-t Feb 24, 2026
ea7d894
t34xx: don't expire reflogs where it matters
pks-t Feb 24, 2026
0894704
t5400: explicitly use "gc" strategy
pks-t Feb 24, 2026
94f5d9f
t5510: explicitly use "gc" strategy
pks-t Feb 24, 2026
38ae87c
t6500: explicitly use "gc" strategy
pks-t Feb 24, 2026
d2fbe9a
t7900: prepare for switch of the default strategy
pks-t Feb 24, 2026
452b12c
builtin/maintenance: use "geometric" strategy by default
pks-t Feb 24, 2026
ebeea3c
build: regenerate config-list.h when Documentation changes
benknoble Feb 24, 2026
f87593a
fetch: fix wrong evaluation order in URL trailing-slash trimming
cuiweixie Feb 25, 2026
2c69ff4
setup: don't modify repo in `create_reference_database()`
KarthikNayak Feb 25, 2026
4ffbb02
refs: extract out `refs_create_refdir_stubs()`
KarthikNayak Feb 25, 2026
2a32ac4
refs: move out stub modification to generic layer
KarthikNayak Feb 25, 2026
d74aacd
refs: receive and use the reference storage payload
KarthikNayak Feb 25, 2026
01dc845
refs: allow reference location in refstorage config
KarthikNayak Feb 25, 2026
53592d6
refs: add GIT_REFERENCE_BACKEND to specify reference backend
KarthikNayak Feb 25, 2026
c63e64e
CodingGuidelines: instruct to name arrays in singular
lucasoshiro Feb 25, 2026
3d4e6d3
repo: rename repo_info_fields to repo_info_field
lucasoshiro Feb 25, 2026
7377a6e
repo: replace get_value_fn_for_key by get_repo_info_field
lucasoshiro Feb 25, 2026
18f16b8
repo: rename struct field to repo_info_field
lucasoshiro Feb 25, 2026
b62dab3
t1900: rename t1900-repo to t1900-repo-info
lucasoshiro Feb 25, 2026
2db3d0a
t1901: adjust nul format output instead of expected value
lucasoshiro Feb 25, 2026
906b632
Documentation/git-repo: replace 'NUL' with '_NUL_'
lucasoshiro Feb 25, 2026
8b97dc3
Documentation/git-repo: capitalize format descriptions
lucasoshiro Feb 25, 2026
1d0a2ac
Merge branch 'kn/ref-location'
gitster Mar 4, 2026
22c9b6b
Merge branch 'kn/osxkeychain-buildfix'
gitster Mar 4, 2026
fa383b9
Merge branch 'sp/shallow-deepen-relative-fix'
gitster Mar 4, 2026
bcc2fc2
Merge branch 'rr/gitweb-mobile'
gitster Mar 4, 2026
efd5fdb
Merge branch 'dk/meson-regen-config-list'
gitster Mar 4, 2026
2d843a2
Merge branch 'bk/mailmap-wo-the-repository'
gitster Mar 4, 2026
7b7d671
Merge branch 'pw/no-more-NULL-means-current-worktree'
gitster Mar 4, 2026
8f760e7
Merge branch 'sp/tree-diff-wo-the-repository'
gitster Mar 4, 2026
1ebfc21
Merge branch 'jr/apply-directory-normalize'
gitster Mar 4, 2026
50d7425
Merge branch 'ps/maintenance-geometric-default'
gitster Mar 4, 2026
34af1d6
Merge branch 'lo/repo-leftover-bits'
gitster Mar 4, 2026
ca1a1a7
Merge branch 'en/merge-ort-almost-wo-the-repository'
gitster Mar 4, 2026
a31d4f1
Merge branch 'ds/config-list-with-type'
gitster Mar 4, 2026
a1b15cc
Merge branch 'cx/fetch-display-ubfix'
gitster Mar 4, 2026
628a66c
The 11th batch
gitster Mar 4, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions Documentation/CodingGuidelines
Original file line number Diff line number Diff line change
Expand Up @@ -668,6 +668,19 @@ For C programs:
unsigned other_field:1;
unsigned field_with_longer_name:1;

- Array names should be named in the singular form if the individual items are
subject of use. E.g.:

char *dog[] = ...;
walk_dog(dog[0]);
walk_dog(dog[1]);

Cases where the array is employed as a whole rather than as its unit parts,
the plural forms is preferable. E.g:

char *dogs[] = ...;
walk_all_dogs(dogs);

For Perl programs:

- Most of the C guidelines above apply.
Expand Down
47 changes: 41 additions & 6 deletions Documentation/RelNotes/2.54.0.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,19 @@ UI, Workflows & Features
* "git add -p" learned a new mode that allows the user to revisit a
file that was already dealt with.

* Allow the directory in which reference backends store their data to
be specified.

* "gitweb" has been taught to be mobile friendly.

* "git apply --directory=./un/../normalized/path" now normalizes the
given path before using it.

* "git maintenance" starts using the "geometric" strategy by default.

* "git config list" is taught to show the values interpreted for
specific type with "--type=<X>" option.


Performance, Internal Implementation, Development Support etc.
--------------------------------------------------------------
Expand Down Expand Up @@ -110,6 +123,22 @@ Performance, Internal Implementation, Development Support etc.

* The code to accept shallow "git push" has been optimized.

* Simplify build procedure for oxskeychain (in contrib/).

* Fix dependency screw-up in meson-based builds.

* Wean the mailmap code off of the_repository dependency.

* API clean-up for the worktree subsystem.

* The last uses of the_repository in "tree-diff.c" have been
eradicated.

* Clean-up the code around "git repo info" command.

* Mark the marge-ort codebase to prevent more uses of the_repository
from getting added.


Fixes since v2.53
-----------------
Expand Down Expand Up @@ -185,6 +214,17 @@ Fixes since v2.53
* An earlier attempt to optimize "git subtree" discarded too much
relevant histories, which has been corrected.

* A prefetch call can be triggered to access a stale diff_queue entry
after diffcore-break breaks a filepair into two and freed the
original entry that is no longer used, leading to a segfault, which
has been corrected.
(merge 2d88ab078d hy/diff-lazy-fetch-with-break-fix later to maint).

* "git fetch --deepen" that tries to go beyond merged branch used to
get confused where the updated shallow points are, which has been
corrected.
(merge 3ef68ff40e sp/shallow-deepen-relative-fix later to maint).

* Other code cleanup, docfix, build fix, etc.
(merge d79fff4a11 jk/remote-tracking-ref-leakfix later to maint).
(merge 7a747f972d dd/t5403-modernise later to maint).
Expand Down Expand Up @@ -214,9 +254,4 @@ Fixes since v2.53
(merge b10e0cb1f3 kh/doc-am-xref later to maint).
(merge ed84bc1c0d kh/doc-patch-id-4 later to maint).
(merge 7451864bfa sc/pack-redundant-leakfix later to maint).

* A prefetch call can be triggered to access a stale diff_queue entry
after diffcore-break breaks a filepair into two and freed the
original entry that is no longer used, leading to a segfault, which
has been corrected.
(merge 2d88ab078d hy/diff-lazy-fetch-with-break-fix later to maint).
(merge f87593ab1a cx/fetch-display-ubfix later to maint).
16 changes: 15 additions & 1 deletion Documentation/config/extensions.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -57,10 +57,24 @@ For historical reasons, this extension is respected regardless of the
`core.repositoryFormatVersion` setting.

refStorage:::
Specify the ref storage format to use. The acceptable values are:
Specify the ref storage format and a corresponding payload. The value
can be either a format name or a URI:
+
--
* A format name alone (e.g., `reftable` or `files`).

* A URI format `<format>://<payload>` explicitly specifies both the
format and payload (e.g., `reftable:///foo/bar`).

Supported format names are:

include::../ref-storage-format.adoc[]

The payload is passed directly to the reference backend. For the files and
reftable backends, this must be a filesystem path where the references will
be stored. Defaulting to the commondir when no payload is provided. Relative
paths are resolved relative to the `$GIT_DIR`. Future backends may support
other payload schemes, e.g., postgres://127.0.0.1:5432?database=myrepo.
--
+
Note that this setting should only be set by linkgit:git-init[1] or
Expand Down
6 changes: 3 additions & 3 deletions Documentation/config/maintenance.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,7 @@ The possible strategies are:
+
* `none`: This strategy implies no tasks are run at all. This is the default
strategy for scheduled maintenance.
* `gc`: This strategy runs the `gc` task. This is the default strategy for
manual maintenance.
* `gc`: This strategy runs the `gc` task.
* `geometric`: This strategy performs geometric repacking of packfiles and
keeps auxiliary data structures up-to-date. The strategy expires data in the
reflog and removes worktrees that cannot be located anymore. When the
Expand All @@ -40,7 +39,8 @@ The possible strategies are:
are already part of a cruft pack will be expired.
+
This repacking strategy is a full replacement for the `gc` strategy and is
recommended for large repositories.
recommended for large repositories. This is the default strategy for manual
maintenance.
* `incremental`: This setting optimizes for performing small maintenance
activities that do not delete any data. This does not schedule the `gc`
task, but runs the `prefetch` and `commit-graph` tasks hourly, the
Expand Down
3 changes: 3 additions & 0 deletions Documentation/git-config.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -240,6 +240,9 @@ Valid `<type>`'s include:
that the given value is canonicalize-able as an ANSI color, but it is written
as-is.
+
If the command is in `list` mode, then the `--type <type>` argument will apply
to each listed config value. If the value does not successfully parse in that
format, then it will be omitted from the list.

--bool::
--int::
Expand Down
8 changes: 4 additions & 4 deletions Documentation/git-repo.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -33,14 +33,14 @@ supported:
+

`lines`:::
output key-value pairs one per line using the `=` character as
Output key-value pairs one per line using the `=` character as
the delimiter between the key and the value. Values containing "unusual"
characters are quoted as explained for the configuration variable
`core.quotePath` (see linkgit:git-config[1]). This is the default.

`nul`:::
similar to `lines`, but using a newline character as the delimiter
between the key and the value and using a NUL character after each value.
Similar to `lines`, but using a newline character as the delimiter
between the key and the value and using a _NUL_ character after each value.
This format is better suited for being parsed by another applications than
`lines`. Unlike in the `lines` format, the values are never quoted.
+
Expand Down Expand Up @@ -80,7 +80,7 @@ supported:
configuration variable `core.quotePath` (see linkgit:git-config[1]).

`nul`:::
Similar to `lines`, but uses a NUL character to delimit between
Similar to `lines`, but uses a _NUL_ character to delimit between
key-value pairs instead of a newline. Also uses a newline character as
the delimiter between the key and value instead of '='. Unlike the
`lines` format, values containing "unusual" characters are never
Expand Down
5 changes: 5 additions & 0 deletions Documentation/git.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -584,6 +584,11 @@ double-quotes and respecting backslash escapes. E.g., the value
repositories will be set to this value. The default is "files".
See `--ref-format` in linkgit:git-init[1].

`GIT_REFERENCE_BACKEND`::
Specify which reference backend to be used along with its URI.
See `extensions.refStorage` option in linkgit:git-config[1] for more
details. Overrides the config variable when used.

Git Commits
~~~~~~~~~~~
`GIT_AUTHOR_NAME`::
Expand Down
26 changes: 24 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -2688,9 +2688,10 @@ $(BUILT_INS): git$X
cp $< $@

config-list.h: generate-configlist.sh
@mkdir -p .depend
$(QUIET_GEN)$(SHELL_PATH) ./generate-configlist.sh . $@ .depend/config-list.h.d

config-list.h: Documentation/*config.adoc Documentation/config/*.adoc
$(QUIET_GEN)$(SHELL_PATH) ./generate-configlist.sh . $@
-include .depend/config-list.h.d

command-list.h: generate-cmdlist.sh command-list.txt

Expand Down Expand Up @@ -2880,6 +2881,10 @@ objects: $(OBJECTS)
dep_files := $(foreach f,$(OBJECTS),$(dir $f).depend/$(notdir $f).d)
dep_dirs := $(addsuffix .depend,$(sort $(dir $(OBJECTS))))

ifeq ($(uname_S),Darwin)
dep_dirs += $(addsuffix .depend,$(sort $(dir contrib/credential/osxkeychain/git-credential-osxkeychain.o)))
endif

ifeq ($(COMPUTE_HEADER_DEPENDENCIES),yes)
$(dep_dirs):
@mkdir -p $@
Expand Down Expand Up @@ -4067,3 +4072,20 @@ $(LIBGIT_HIDDEN_EXPORT): $(LIBGIT_PARTIAL_EXPORT)

contrib/libgit-sys/libgitpub.a: $(LIBGIT_HIDDEN_EXPORT)
$(AR) $(ARFLAGS) $@ $^

contrib/credential/osxkeychain/git-credential-osxkeychain: contrib/credential/osxkeychain/git-credential-osxkeychain.o $(LIB_FILE) GIT-LDFLAGS
$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) \
$(filter %.o,$^) $(LIB_FILE) $(EXTLIBS) -framework Security -framework CoreFoundation

contrib/credential/osxkeychain/git-credential-osxkeychain.o: contrib/credential/osxkeychain/git-credential-osxkeychain.c GIT-CFLAGS
$(QUIET_LINK)$(CC) -o $@ -c $(dep_args) $(compdb_args) $(ALL_CFLAGS) $(EXTRA_CPPFLAGS) $<

install-git-credential-osxkeychain: contrib/credential/osxkeychain/git-credential-osxkeychain
$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(gitexec_instdir_SQ)'
$(INSTALL) $(INSTALL_STRIP) $< '$(DESTDIR_SQ)$(gitexec_instdir_SQ)'

.PHONY: clean-git-credential-osxkeychain
clean-git-credential-osxkeychain:
$(RM) \
contrib/credential/osxkeychain/git-credential-osxkeychain \
contrib/credential/osxkeychain/git-credential-osxkeychain.o
4 changes: 4 additions & 0 deletions apply.c
Original file line number Diff line number Diff line change
Expand Up @@ -5022,6 +5022,10 @@ static int apply_option_parse_directory(const struct option *opt,

strbuf_reset(&state->root);
strbuf_addstr(&state->root, arg);

if (strbuf_normalize_path(&state->root) < 0)
return error(_("unable to normalize directory: '%s'"), arg);

strbuf_complete(&state->root, '/');
return 0;
}
Expand Down
2 changes: 1 addition & 1 deletion builtin/blame.c
Original file line number Diff line number Diff line change
Expand Up @@ -1252,7 +1252,7 @@ int cmd_blame(int argc,
sb.xdl_opts = xdl_opts;
sb.no_whole_file_rename = no_whole_file_rename;

read_mailmap(&mailmap);
read_mailmap(the_repository, &mailmap);

sb.found_guilty_entry = &found_guilty_entry;
sb.found_guilty_entry_data = &pi;
Expand Down
2 changes: 1 addition & 1 deletion builtin/cat-file.c
Original file line number Diff line number Diff line change
Expand Up @@ -1127,7 +1127,7 @@ int cmd_cat_file(int argc,
opt_epts = (opt == 'e' || opt == 'p' || opt == 't' || opt == 's');

if (use_mailmap)
read_mailmap(&mailmap);
read_mailmap(the_repository, &mailmap);

switch (batch.objects_filter.choice) {
case LOFC_DISABLED:
Expand Down
4 changes: 2 additions & 2 deletions builtin/check-mailmap.c
Original file line number Diff line number Diff line change
Expand Up @@ -63,9 +63,9 @@ int cmd_check_mailmap(int argc,
if (argc == 0 && !use_stdin)
die(_("no contacts specified"));

read_mailmap(&mailmap);
read_mailmap(the_repository, &mailmap);
if (mailmap_blob)
read_mailmap_blob(&mailmap, mailmap_blob);
read_mailmap_blob(the_repository, &mailmap, mailmap_blob);
if (mailmap_file)
read_mailmap_file(&mailmap, mailmap_file, 0);

Expand Down
9 changes: 2 additions & 7 deletions builtin/clone.c
Original file line number Diff line number Diff line change
Expand Up @@ -1228,12 +1228,7 @@ int cmd_clone(int argc,
initialize_repository_version(GIT_HASH_UNKNOWN,
the_repository->ref_storage_format, 1);

strbuf_addf(&buf, "%s/HEAD", git_dir);
write_file(buf.buf, "ref: refs/heads/.invalid");

strbuf_reset(&buf);
strbuf_addf(&buf, "%s/refs", git_dir);
safe_create_dir(the_repository, buf.buf, 1);
refs_create_refdir_stubs(the_repository, git_dir, NULL);

/*
* additional config can be injected with -c, make sure it's included
Expand Down Expand Up @@ -1445,7 +1440,7 @@ int cmd_clone(int argc,
hash_algo = hash_algo_by_ptr(transport_get_hash_algo(transport));
initialize_repository_version(hash_algo, the_repository->ref_storage_format, 1);
repo_set_hash_algo(the_repository, hash_algo);
create_reference_database(the_repository->ref_storage_format, NULL, 1);
create_reference_database(NULL, 1);

/*
* Before fetching from the remote, download and install bundle
Expand Down
2 changes: 1 addition & 1 deletion builtin/commit.c
Original file line number Diff line number Diff line change
Expand Up @@ -1155,7 +1155,7 @@ static const char *find_author_by_nickname(const char *name)
setup_revisions(ac, av, &revs, NULL);
revs.mailmap = xmalloc(sizeof(struct string_list));
string_list_init_nodup(revs.mailmap);
read_mailmap(revs.mailmap);
read_mailmap(the_repository, revs.mailmap);

if (prepare_revision_walk(&revs))
die(_("revision walk setup failed"));
Expand Down
Loading