Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
60 commits
Select commit Hold shift + click to select a range
1d98019
doc: convert git-difftool manual page to synopsis style
jnavila Apr 4, 2026
5594be6
doc: convert git-range-diff manual page to synopsis style
jnavila Apr 4, 2026
f4c1b8e
doc: convert git-shortlog manual page to synopsis style
jnavila Apr 4, 2026
80f4b80
doc: convert git-describe manual page to synopsis style
jnavila Apr 4, 2026
5217312
cache-tree: fix inverted object existence check in cache_tree_fully_v…
Apr 6, 2026
8808e61
promisor-remote: try accepted remotes before others in get_direct()
chriscool Apr 7, 2026
720b7c2
promisor-remote: pass config entry to all_fields_match() directly
chriscool Apr 7, 2026
4ed9283
promisor-remote: clarify that a remote is ignored
chriscool Apr 7, 2026
3b4f040
promisor-remote: reject empty name or URL in advertised remote
chriscool Apr 7, 2026
64f0f6b
promisor-remote: refactor should_accept_remote() control flow
chriscool Apr 7, 2026
16a4372
promisor-remote: refactor has_control_char()
chriscool Apr 7, 2026
7557a56
promisor-remote: refactor accept_from_server()
chriscool Apr 7, 2026
e0f80d8
promisor-remote: keep accepted promisor_info structs alive
chriscool Apr 7, 2026
d56e483
promisor-remote: remove the 'accepted' strvec
chriscool Apr 7, 2026
8eb8635
t5710: use proper file:// URIs for absolute paths
chriscool Apr 7, 2026
b886f0b
refs: add struct repository parameter in get_files_ref_lock_timeout_ms()
shreyp135 Apr 4, 2026
9a03f16
refs: remove the_hash_algo global state
shreyp135 Apr 4, 2026
57c590f
refs/reftable-backend: drop uses of the_repository
shreyp135 Apr 4, 2026
6077dc8
docs: update version with default Rust support
bk2204 Apr 9, 2026
40c789d
ci: install cargo on Alpine
bk2204 Apr 9, 2026
30e6f7a
Linux: link against libdl
bk2204 Apr 9, 2026
32d5b90
Enable Rust by default
bk2204 Apr 9, 2026
8d2ffcf
repository: fix repo_init() memleak due to missing _clear()
10ne1 Apr 10, 2026
1c9e5b3
config: add a repo_config_get_uint() helper
10ne1 Apr 10, 2026
b9a4c9a
hook: parse the hook.jobs config
10ne1 Apr 10, 2026
680e69f
hook: allow parallel hook execution
Apr 10, 2026
f776b77
hook: allow pre-push parallel execution
10ne1 Apr 10, 2026
ae25764
hook: mark non-parallelizable hooks
nasamuffin Apr 10, 2026
091d2db
hook: add -j/--jobs option to git hook run
nasamuffin Apr 10, 2026
084a55b
hook: add per-event jobs config
10ne1 Apr 10, 2026
5e57b20
hook: warn when hook.<friendly-name>.jobs is set
10ne1 Apr 10, 2026
2eb541e
hook: move is_known_hook() to hook.c for wider use
10ne1 Apr 10, 2026
dcfb5af
hook: add hook.<event>.enabled switch
10ne1 Apr 10, 2026
495b7d5
hook: allow hook.jobs=-1 to use all available CPU cores
10ne1 Apr 10, 2026
75b7cb5
t1800: test SIGPIPE with parallel hooks
peff Apr 10, 2026
955c88f
userdiff: tighten word-diff test case of the scheme driver
j6t Apr 15, 2026
b79f7a3
userdiff: extend Scheme support to cover other Lisp dialects
slburson Apr 15, 2026
b964902
CodingGuidelines: st_mtimespec vs st_mtim vs st_mtime
gitster Apr 10, 2026
0cb6316
t: prepare `test_match_signal ()` calls for `set -e`
pks-t Apr 21, 2026
990fd36
t: prepare `test_must_fail ()` for `set -e`
pks-t Apr 21, 2026
f43d01a
t: prepare `stop_git_daemon ()` for `set -e`
pks-t Apr 21, 2026
9c64add
t: prepare `git config --unset` calls for `set -e`
pks-t Apr 21, 2026
0c6600c
t: prepare conditional test execution for `set -e`
pks-t Apr 21, 2026
5f0d596
t: prepare execution of potentially failing commands for `set -e`
pks-t Apr 21, 2026
c1e29bc
t: prepare `test_when_finished ()`/`test_atexit()` for `set -e`
pks-t Apr 21, 2026
b94900a
t0008: silence error in subshell when using `grep -v`
pks-t Apr 21, 2026
4f917bb
t1301: don't fail in case setfacl(1) doesn't exist or fails
pks-t Apr 21, 2026
090af99
t6002: fix use of `expr` with `set -e`
pks-t Apr 21, 2026
1ecf653
t9902: fix use of `read` with `set -e`
pks-t Apr 21, 2026
ffe8005
t: detect errors outside of test cases
pks-t Apr 21, 2026
655096d
Merge branch 'sp/refs-reduce-the-repository'
gitster May 11, 2026
ead6888
Merge branch 'ja/doc-difftool-synopsis-style'
gitster May 11, 2026
ab0691d
Merge branch 'dl/cache-tree-fully-valid-fix'
gitster May 11, 2026
a19de4d
Merge branch 'cc/promisor-auto-config-url'
gitster May 11, 2026
718db09
Merge branch 'ar/parallel-hooks'
gitster May 11, 2026
570e1e0
Merge branch 'jc/doc-timestamps-in-stat'
gitster May 11, 2026
9b761be
Merge branch 'sb/userdiff-lisp-family'
gitster May 11, 2026
bd5c282
Merge branch 'bc/rust-by-default'
gitster May 11, 2026
6a5621b
Merge branch 'ps/test-set-e-clean'
gitster May 11, 2026
8a10133
Start 2.55 cycle
gitster May 11, 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
6 changes: 6 additions & 0 deletions Documentation/CodingGuidelines
Original file line number Diff line number Diff line change
Expand Up @@ -693,6 +693,12 @@ For C programs:
char *dogs[] = ...;
walk_all_dogs(dogs);

- For file timestamps, do not use "st_mtim" (and other timestamp
members in "struct stat") unconditionally; not everybody is POSIX
(grep for USE_ST_TIMESPEC). If you only need a timestamp in whole
second resolution, "st_mtime" should work fine everywhere.


For Perl programs:

- Most of the C guidelines above apply.
Expand Down
43 changes: 43 additions & 0 deletions Documentation/RelNotes/2.55.0.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
Git v2.55 Release Notes
=======================

UI, Workflows & Features
------------------------

* Hook scripts defined via the configuration system can now be
configured to run in parallel.

* The userdiff driver for the Scheme language has been extended to
cover other Lisp dialects.


Performance, Internal Implementation, Development Support etc.
--------------------------------------------------------------

* Promisor remote handling has been refactored and fixed in
preparation for auto-configuration of advertised remotes.

* Rust support is enabled by default (but still allows opting out) in
some future version of Git.


Fixes since v2.54
-----------------

* Code clean-up to use the right instance of a repository instance in
calls inside refs subsystem.
(merge 57c590feb9 sp/refs-reduce-the-repository later to maint).

* The check that implements the logic to see if an in-core cache-tree
is fully ready to write out a tree object was broken, which has
been corrected.
(merge 521731213c dl/cache-tree-fully-valid-fix later to maint).

* The test suite harness and many individual test scripts have been
updated to work correctly when 'set -e' is in effect, which helps
detect misspelled test commands.
(merge ffe8005b9d ps/test-set-e-clean later to maint).

* Other code cleanup, docfix, build fix, etc.
(merge 80f4b802e9 ja/doc-difftool-synopsis-style later to maint).
(merge b96490241e jc/doc-timestamps-in-stat later to maint).
24 changes: 12 additions & 12 deletions Documentation/config/difftool.adoc
Original file line number Diff line number Diff line change
@@ -1,43 +1,43 @@
diff.tool::
`diff.tool`::
Controls which diff tool is used by linkgit:git-difftool[1].
This variable overrides the value configured in `merge.tool`.
The list below shows the valid built-in values.
Any other value is treated as a custom diff tool and requires
that a corresponding difftool.<tool>.cmd variable is defined.
that a corresponding `difftool.<tool>.cmd` variable is defined.

diff.guitool::
`diff.guitool`::
Controls which diff tool is used by linkgit:git-difftool[1] when
the -g/--gui flag is specified. This variable overrides the value
the `-g`/`--gui` flag is specified. This variable overrides the value
configured in `merge.guitool`. The list below shows the valid
built-in values. Any other value is treated as a custom diff tool
and requires that a corresponding difftool.<guitool>.cmd variable
and requires that a corresponding `difftool.<guitool>.cmd` variable
is defined.

include::{build_dir}/mergetools-diff.adoc[]

difftool.<tool>.cmd::
`difftool.<tool>.cmd`::
Specify the command to invoke the specified diff tool.
The specified command is evaluated in shell with the following
variables available: 'LOCAL' is set to the name of the temporary
file containing the contents of the diff pre-image and 'REMOTE'
variables available: `LOCAL` is set to the name of the temporary
file containing the contents of the diff pre-image and `REMOTE`
is set to the name of the temporary file containing the contents
of the diff post-image.
+
See the `--tool=<tool>` option in linkgit:git-difftool[1] for more details.

difftool.<tool>.path::
`difftool.<tool>.path`::
Override the path for the given tool. This is useful in case
your tool is not in the PATH.

difftool.trustExitCode::
`difftool.trustExitCode`::
Exit difftool if the invoked diff tool returns a non-zero exit status.
+
See the `--trust-exit-code` option in linkgit:git-difftool[1] for more details.

difftool.prompt::
`difftool.prompt`::
Prompt before each invocation of the diff tool.

difftool.guiDefault::
`difftool.guiDefault`::
Set `true` to use the `diff.guitool` by default (equivalent to specifying
the `--gui` argument), or `auto` to select `diff.guitool` or `diff.tool`
depending on the presence of a `DISPLAY` environment variable value. The
Expand Down
76 changes: 76 additions & 0 deletions Documentation/config/hook.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,86 @@ hook.<friendly-name>.event::
events, specify the key more than once. An empty value resets
the list of events, clearing any previously defined events for
`hook.<friendly-name>`. See linkgit:git-hook[1].
+
The `<friendly-name>` must not be the same as a known hook event name
(e.g. do not use `hook.pre-commit.event`). Using a known event name as
a friendly-name is a fatal error because it creates an ambiguity with
`hook.<event>.enabled` and `hook.<event>.jobs`. For unknown event names,
a warning is issued when `<friendly-name>` matches the event value.

hook.<friendly-name>.enabled::
Whether the hook `hook.<friendly-name>` is enabled. Defaults to `true`.
Set to `false` to disable the hook without removing its
configuration. This is particularly useful when a hook is defined
in a system or global config file and needs to be disabled for a
specific repository. See linkgit:git-hook[1].

hook.<friendly-name>.parallel::
Whether the hook `hook.<friendly-name>` may run in parallel with other hooks
for the same event. Defaults to `false`. Set to `true` only when the
hook script is safe to run concurrently with other hooks for the same
event. If any hook for an event does not have this set to `true`,
all hooks for that event run sequentially regardless of `hook.jobs`.
Only configured (named) hooks need to declare this. Traditional hooks
found in the hooks directory do not need to, and run in parallel when
the effective job count is greater than 1. See linkgit:git-hook[1].

hook.<event>.enabled::
Switch to enable or disable all hooks for the `<event>` hook event.
When set to `false`, no hooks fire for that event, regardless of any
per-hook `hook.<friendly-name>.enabled` settings. Defaults to `true`.
See linkgit:git-hook[1].
+
Note on naming: `<event>` must be the event name (e.g. `pre-commit`),
not a hook friendly-name. Since using a known event name as a
friendly-name is disallowed (see `hook.<friendly-name>.event` above),
there is no ambiguity between event-level and per-hook `.enabled`
settings for known events. For unknown events, if a friendly-name
matches the event name despite the warning, `.enabled` is treated
as per-hook only.

hook.<event>.jobs::
Specifies how many hooks can be run simultaneously for the `<event>`
hook event (e.g. `hook.post-receive.jobs = 4`). Overrides `hook.jobs`
for this specific event. The same parallelism restrictions apply: this
setting has no effect unless all configured hooks for the event have
`hook.<friendly-name>.parallel` set to `true`. Set to `-1` to use the
number of available CPU cores. Must be a positive integer or `-1`;
zero is rejected with a warning. See linkgit:git-hook[1].
+
Note on naming: although this key resembles `hook.<friendly-name>.*`
(a per-hook setting), `<event>` must be the event name, not a hook
friendly name. The key component is stored literally and looked up by
event name at runtime with no translation between the two namespaces.
A key like `hook.my-hook.jobs` is stored under `"my-hook"` but the
lookup at runtime uses the event name (e.g. `"post-receive"`), so
`hook.my-hook.jobs` is silently ignored even when `my-hook` is
registered for that event. Use `hook.post-receive.jobs` or any other
valid event name when setting `hook.<event>.jobs`.

hook.jobs::
Specifies how many hooks can be run simultaneously during parallelized
hook execution. If unspecified, defaults to 1 (serial execution).
Set to `-1` to use the number of available CPU cores.
Can be overridden on a per-event basis with `hook.<event>.jobs`.
Some hooks always run sequentially regardless of this setting because
they operate on shared data and cannot safely be parallelized:
+
--
`applypatch-msg`;;
`prepare-commit-msg`;;
`commit-msg`;;
Receive a commit message file and may rewrite it in place.
`pre-commit`;;
`post-checkout`;;
`push-to-checkout`;;
`post-commit`;;
Access the working tree, index, or repository state.
--
+
This setting has no effect unless all configured hooks for the event have
`hook.<friendly-name>.parallel` set to `true`.
+
For `pre-push` hooks, which normally keep stdout and stderr separate,
setting this to a value greater than 1 (or passing `-j`) will merge stdout
into stderr to allow correct de-interleaving of parallel output.
8 changes: 4 additions & 4 deletions Documentation/config/mergetool.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -52,13 +52,13 @@
if `merge.tool` is configured as _<variant>_), Git will consult
`mergetool.<variant>.layout` to determine the tool's layout. If the
variant-specific configuration is not available, `vimdiff` ' s is used as
fallback. If that too is not available, a default layout with 4 windows
will be used. To configure the layout, see the 'BACKEND SPECIFIC HINTS'
fallback. If that too is not available, a default layout with 4 windows
will be used.
ifdef::git-mergetool[]
section.
To configure the layout, see the 'BACKEND SPECIFIC HINTS' section.
endif::[]
ifndef::git-mergetool[]
section in linkgit:git-mergetool[1].
To configure the layout, see the 'BACKEND SPECIFIC HINTS' section in linkgit:git-mergetool[1].
endif::[]

`mergetool.hideResolved`::
Expand Down
Loading