Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
dee8094
doc: add an explanation of Git's data model
jvns Nov 12, 2025
8d4725e
whitespace: correct bit assignment comments
gitster Nov 12, 2025
f83d1af
diff: emit_line_ws_markup() if/else style fix
gitster Nov 12, 2025
fc7abcd
diff: correct suppress_blank_empty hack
gitster Nov 12, 2025
ced0561
diff: keep track of the type of the last line seen
gitster Nov 12, 2025
29228cb
diff: refactor output of incomplete line
gitster Nov 12, 2025
35925f1
diff: call emit_callback ecbdata everywhere
gitster Nov 12, 2025
8d8e3c6
diff: update the way rewrite diff handles incomplete lines
gitster Nov 12, 2025
3a4eb5a
apply: revamp the parsing of incomplete lines
gitster Nov 12, 2025
a675104
whitespace: allocate a few more bits and define WS_INCOMPLETE_LINE
gitster Nov 12, 2025
9fb15a8
apply: check and fix incomplete lines
gitster Nov 12, 2025
ab2693c
diff: highlight and error out on incomplete lines
gitster Nov 12, 2025
51358a1
attr: enable incomplete-line whitespace error for this project
gitster Nov 12, 2025
65e8141
compat/mmap: mark unused argument in git_munmap()
peff Nov 18, 2025
4deb882
pack-bitmap: handle name-hash lookups in incremental bitmaps
peff Nov 18, 2025
a9990f8
Makefile: turn on NO_MMAP when building with ASan
peff Nov 18, 2025
c4c9089
cache-tree: avoid strtol() on non-string buffer
peff Nov 18, 2025
0b6ec07
fsck: assert newline presence in fsck_ident()
peff Nov 18, 2025
830424d
fsck: avoid strcspn() in fsck_ident()
peff Nov 18, 2025
f05df7f
fsck: remove redundant date timestamp check
peff Nov 18, 2025
5a99359
fsck: avoid parse_timestamp() on buffer that isn't NUL-terminated
peff Nov 18, 2025
a031b61
t: enable ASan's strict_string_checks option
peff Nov 18, 2025
fd7d79d
repo: factor out field printing to dedicated function
lucasoshiro Nov 18, 2025
155caac
repo: add --all to git-repo-info
lucasoshiro Nov 18, 2025
903b04a
doc: convert git fetch to synopsis style
jnavila Nov 19, 2025
c80a5eb
doc: convert git pull to synopsis style
jnavila Nov 19, 2025
f7316a6
doc: convert git push to synopsis style
jnavila Nov 19, 2025
fddba8f
doc: pull-fetch-param typofix
Nov 24, 2025
0fec747
Merge branch 'lo/repo-info-all'
gitster Dec 1, 2025
ffd9bb1
Merge branch 'ja/doc-synopsis-style'
gitster Dec 1, 2025
3b212a8
Merge branch 'jc/whitespace-incomplete-line'
gitster Dec 1, 2025
6912d80
Merge branch 'je/doc-data-model'
gitster Dec 1, 2025
aea8cc3
Merge branch 'jk/asan-bonanza'
gitster Dec 1, 2025
f0ef5b6
The fifth batch
gitster Dec 1, 2025
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: 3 additions & 3 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
* whitespace=trail,space
*.[ch] whitespace=indent,trail,space diff=cpp
*.sh whitespace=indent,trail,space text eol=lf
*.[ch] whitespace=indent,trail,space,incomplete diff=cpp
*.sh whitespace=indent,trail,space,incomplete text eol=lf
*.perl text eol=lf diff=perl
*.pl text eof=lf diff=perl
*.pm text eol=lf diff=perl
*.py text eol=lf diff=python
*.bat text eol=crlf
CODE_OF_CONDUCT.md -whitespace
/Documentation/**/*.adoc text eol=lf
/Documentation/**/*.adoc text eol=lf whitespace=trail,space,incomplete
/command-list.txt text eol=lf
/GIT-VERSION-GEN text eol=lf
/mergetools/* text eol=lf
Expand Down
1 change: 1 addition & 0 deletions Documentation/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ MAN7_TXT += gitcli.adoc
MAN7_TXT += gitcore-tutorial.adoc
MAN7_TXT += gitcredentials.adoc
MAN7_TXT += gitcvs-migration.adoc
MAN7_TXT += gitdatamodel.adoc
MAN7_TXT += gitdiffcore.adoc
MAN7_TXT += giteveryday.adoc
MAN7_TXT += gitfaq.adoc
Expand Down
11 changes: 11 additions & 0 deletions Documentation/RelNotes/2.53.0.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,13 @@ UI, Workflows & Features

* "git blame" learns "--diff-algorithm=<algo>" option.

* "git repo info" learned "--all" option.

* Both "git apply" and "git diff" learn a new whitespace error class,
"incomplete-line".

* Add a new manual that describes the data model.


Performance, Internal Implementation, Development Support etc.
--------------------------------------------------------------
Expand Down Expand Up @@ -95,7 +102,11 @@ Fixes since v2.52
* Emulation code clean-up.
(merge 2367c6bcd6 gf/win32-pthread-cond-wait-err later to maint).

* Various issues detected by Asan have been corrected.
(merge a031b6181a jk/asan-bonanza later to maint).

* Other code cleanup, docfix, build fix, etc.
(merge 46207a54cc qj/doc-http-bad-want-response later to maint).
(merge df90eccd93 kh/doc-commit-extra-references later to maint).
(merge f18aa68861 rs/xmkstemp-simplify later to maint).
(merge fddba8f737 ja/doc-synopsis-style later to maint).
2 changes: 2 additions & 0 deletions Documentation/config/core.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -629,6 +629,8 @@ core.whitespace::
part of the line terminator, i.e. with it, `trailing-space`
does not trigger if the character before such a carriage-return
is not a whitespace (not enabled by default).
* `incomplete-line` treats the last line of a file that is missing the
newline at the end as an error (not enabled by default).
* `tabwidth=<n>` tells how many character positions a tab occupies; this
is relevant for `indent-with-non-tab` and when Git fixes `tab-in-indent`
errors. The default tab width is 8. Allowed values are 1 to 63.
Expand Down
60 changes: 30 additions & 30 deletions Documentation/config/fetch.adoc
Original file line number Diff line number Diff line change
@@ -1,32 +1,32 @@
fetch.recurseSubmodules::
`fetch.recurseSubmodules`::
This option controls whether `git fetch` (and the underlying fetch
in `git pull`) will recursively fetch into populated submodules.
This option can be set either to a boolean value or to 'on-demand'.
This option can be set either to a boolean value or to `on-demand`.
Setting it to a boolean changes the behavior of fetch and pull to
recurse unconditionally into submodules when set to true or to not
recurse at all when set to false. When set to 'on-demand', fetch and
recurse at all when set to false. When set to `on-demand`, fetch and
pull will only recurse into a populated submodule when its
superproject retrieves a commit that updates the submodule's
reference.
Defaults to 'on-demand', or to the value of 'submodule.recurse' if set.
Defaults to `on-demand`, or to the value of `submodule.recurse` if set.

fetch.fsckObjects::
`fetch.fsckObjects`::
If it is set to true, git-fetch-pack will check all fetched
objects. See `transfer.fsckObjects` for what's
checked. Defaults to false. If not set, the value of
checked. Defaults to `false`. If not set, the value of
`transfer.fsckObjects` is used instead.

fetch.fsck.<msg-id>::
`fetch.fsck.<msg-id>`::
Acts like `fsck.<msg-id>`, but is used by
linkgit:git-fetch-pack[1] instead of linkgit:git-fsck[1]. See
the `fsck.<msg-id>` documentation for details.

fetch.fsck.skipList::
`fetch.fsck.skipList`::
Acts like `fsck.skipList`, but is used by
linkgit:git-fetch-pack[1] instead of linkgit:git-fsck[1]. See
the `fsck.skipList` documentation for details.

fetch.unpackLimit::
`fetch.unpackLimit`::
If the number of objects fetched over the Git native
transfer is below this
limit, then the objects will be unpacked into loose object
Expand All @@ -37,54 +37,54 @@ fetch.unpackLimit::
especially on slow filesystems. If not set, the value of
`transfer.unpackLimit` is used instead.

fetch.prune::
`fetch.prune`::
If true, fetch will automatically behave as if the `--prune`
option was given on the command line. See also `remote.<name>.prune`
and the PRUNING section of linkgit:git-fetch[1].

fetch.pruneTags::
`fetch.pruneTags`::
If true, fetch will automatically behave as if the
`refs/tags/*:refs/tags/*` refspec was provided when pruning,
if not set already. This allows for setting both this option
and `fetch.prune` to maintain a 1=1 mapping to upstream
refs. See also `remote.<name>.pruneTags` and the PRUNING
section of linkgit:git-fetch[1].

fetch.all::
`fetch.all`::
If true, fetch will attempt to update all available remotes.
This behavior can be overridden by passing `--no-all` or by
explicitly specifying one or more remote(s) to fetch from.
Defaults to false.
Defaults to `false`.

fetch.output::
`fetch.output`::
Control how ref update status is printed. Valid values are
`full` and `compact`. Default value is `full`. See the
OUTPUT section in linkgit:git-fetch[1] for details.

fetch.negotiationAlgorithm::
`fetch.negotiationAlgorithm`::
Control how information about the commits in the local repository
is sent when negotiating the contents of the packfile to be sent by
the server. Set to "consecutive" to use an algorithm that walks
over consecutive commits checking each one. Set to "skipping" to
the server. Set to `consecutive` to use an algorithm that walks
over consecutive commits checking each one. Set to `skipping` to
use an algorithm that skips commits in an effort to converge
faster, but may result in a larger-than-necessary packfile; or set
to "noop" to not send any information at all, which will almost
to `noop` to not send any information at all, which will almost
certainly result in a larger-than-necessary packfile, but will skip
the negotiation step. Set to "default" to override settings made
the negotiation step. Set to `default` to override settings made
previously and use the default behaviour. The default is normally
"consecutive", but if `feature.experimental` is true, then the
default is "skipping". Unknown values will cause 'git fetch' to
`consecutive`, but if `feature.experimental` is `true`, then the
default is `skipping`. Unknown values will cause `git fetch` to
error out.
+
See also the `--negotiate-only` and `--negotiation-tip` options to
linkgit:git-fetch[1].

fetch.showForcedUpdates::
Set to false to enable `--no-show-forced-updates` in
`fetch.showForcedUpdates`::
Set to `false` to enable `--no-show-forced-updates` in
linkgit:git-fetch[1] and linkgit:git-pull[1] commands.
Defaults to true.
Defaults to `true`.

fetch.parallel::
`fetch.parallel`::
Specifies the maximal number of fetch operations to be run in parallel
at a time (submodules, or remotes when the `--multiple` option of
linkgit:git-fetch[1] is in effect).
Expand All @@ -94,16 +94,16 @@ A value of 0 will give some reasonable default. If unset, it defaults to 1.
For submodules, this setting can be overridden using the `submodule.fetchJobs`
config setting.

fetch.writeCommitGraph::
`fetch.writeCommitGraph`::
Set to true to write a commit-graph after every `git fetch` command
that downloads a pack-file from a remote. Using the `--split` option,
most executions will create a very small commit-graph file on top of
the existing commit-graph file(s). Occasionally, these files will
merge and the write may take longer. Having an updated commit-graph
file helps performance of many Git commands, including `git merge-base`,
`git push -f`, and `git log --graph`. Defaults to false.
`git push -f`, and `git log --graph`. Defaults to `false`.

fetch.bundleURI::
`fetch.bundleURI`::
This value stores a URI for downloading Git object data from a bundle
URI before performing an incremental fetch from the origin Git server.
This is similar to how the `--bundle-uri` option behaves in
Expand All @@ -115,9 +115,9 @@ If you modify this value and your repository has a `fetch.bundleCreationToken`
value, then remove that `fetch.bundleCreationToken` value before fetching from
the new bundle URI.

fetch.bundleCreationToken::
`fetch.bundleCreationToken`::
When using `fetch.bundleURI` to fetch incrementally from a bundle
list that uses the "creationToken" heuristic, this config value
list that uses the "`creationToken`" heuristic, this config value
stores the maximum `creationToken` value of the downloaded bundles.
This value is used to prevent downloading bundles in the future
if the advertised `creationToken` is not strictly larger than this
Expand Down
113 changes: 59 additions & 54 deletions Documentation/config/push.adoc
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
push.autoSetupRemote::
If set to "true" assume `--set-upstream` on default push when no
`push.autoSetupRemote`::
If set to `true` assume `--set-upstream` on default push when no
upstream tracking exists for the current branch; this option
takes effect with push.default options 'simple', 'upstream',
and 'current'. It is useful if by default you want new branches
takes effect with `push.default` options `simple`, `upstream`,
and `current`. It is useful if by default you want new branches
to be pushed to the default remote (like the behavior of
'push.default=current') and you also want the upstream tracking
`push.default=current`) and you also want the upstream tracking
to be set. Workflows most likely to benefit from this option are
'simple' central workflows where all branches are expected to
`simple` central workflows where all branches are expected to
have the same name on the remote.

push.default::
`push.default`::
Defines the action `git push` should take if no refspec is
given (whether from the command-line, config, or elsewhere).
Different values are well-suited for
Expand All @@ -18,24 +18,28 @@ push.default::
`upstream` is probably what you want. Possible values are:
+
--

* `nothing` - do not push anything (error out) unless a refspec is
given. This is primarily meant for people who want to
avoid mistakes by always being explicit.
* `current` - push the current branch to update a branch with the same
name on the receiving end. Works in both central and non-central
workflows.
* `upstream` - push the current branch back to the branch whose
changes are usually integrated into the current branch (which is
called `@{upstream}`). This mode only makes sense if you are
pushing to the same repository you would normally pull from
(i.e. central workflow).
* `tracking` - This is a deprecated synonym for `upstream`.
* `simple` - push the current branch with the same name on the remote.
`nothing`;;
do not push anything (error out) unless a refspec is
given. This is primarily meant for people who want to
avoid mistakes by always being explicit.

`current`;;
push the current branch to update a branch with the same
name on the receiving end. Works in both central and non-central
workflows.

`upstream`;;
push the current branch back to the branch whose
changes are usually integrated into the current branch (which is
called `@{upstream}`). This mode only makes sense if you are
pushing to the same repository you would normally pull from
(i.e. central workflow).

`tracking`;;
this is a deprecated synonym for `upstream`.

`simple`;;
push the current branch with the same name on the remote.
+
If you are working on a centralized workflow (pushing to the same repository you
pull from, which is typically `origin`), then you need to configure an upstream
Expand All @@ -44,16 +48,17 @@ branch with the same name.
This mode is the default since Git 2.0, and is the safest option suited for
beginners.

* `matching` - push all branches having the same name on both ends.
This makes the repository you are pushing to remember the set of
branches that will be pushed out (e.g. if you always push 'maint'
and 'master' there and no other branches, the repository you push
to will have these two branches, and your local 'maint' and
'master' will be pushed there).
`matching`;;
push all branches having the same name on both ends.
This makes the repository you are pushing to remember the set of
branches that will be pushed out (e.g. if you always push `maint`
and `master` there and no other branches, the repository you push
to will have these two branches, and your local `maint` and
`master` will be pushed there).
+
To use this mode effectively, you have to make sure _all_ the
branches you would push out are ready to be pushed out before
running 'git push', as the whole point of this mode is to allow you
running `git push`, as the whole point of this mode is to allow you
to push all of the branches in one go. If you usually finish work
on only one branch and push out the result, while other branches are
unfinished, this mode is not for you. Also this mode is not
Expand All @@ -66,24 +71,24 @@ new default).

--

push.followTags::
`push.followTags`::
If set to true, enable `--follow-tags` option by default. You
may override this configuration at time of push by specifying
`--no-follow-tags`.

push.gpgSign::
May be set to a boolean value, or the string 'if-asked'. A true
`push.gpgSign`::
May be set to a boolean value, or the string `if-asked`. A true
value causes all pushes to be GPG signed, as if `--signed` is
passed to linkgit:git-push[1]. The string 'if-asked' causes
passed to linkgit:git-push[1]. The string `if-asked` causes
pushes to be signed if the server supports it, as if
`--signed=if-asked` is passed to 'git push'. A false value may
`--signed=if-asked` is passed to `git push`. A false value may
override a value from a lower-priority config file. An explicit
command-line flag always overrides this config option.

push.pushOption::
`push.pushOption`::
When no `--push-option=<option>` argument is given from the
command line, `git push` behaves as if each <value> of
this variable is given as `--push-option=<value>`.
command line, `git push` behaves as if each _<option>_ of
this variable is given as `--push-option=<option>`.
+
This is a multi-valued variable, and an empty value can be used in a
higher priority configuration file (e.g. `.git/config` in a
Expand All @@ -109,26 +114,26 @@ This will result in only b (a and c are cleared).

----
push.recurseSubmodules::
May be "check", "on-demand", "only", or "no", with the same behavior
as that of "push --recurse-submodules".
If not set, 'no' is used by default, unless 'submodule.recurse' is
set (in which case a 'true' value means 'on-demand').
`push.recurseSubmodules`::
May be `check`, `on-demand`, `only`, or `no`, with the same behavior
as that of `push --recurse-submodules`.
If not set, `no` is used by default, unless `submodule.recurse` is
set (in which case a `true` value means `on-demand`).
push.useForceIfIncludes::
If set to "true", it is equivalent to specifying
`push.useForceIfIncludes`::
If set to `true`, it is equivalent to specifying
`--force-if-includes` as an option to linkgit:git-push[1]
in the command line. Adding `--no-force-if-includes` at the
time of push overrides this configuration setting.
push.negotiate::
If set to "true", attempt to reduce the size of the packfile
`push.negotiate`::
If set to `true`, attempt to reduce the size of the packfile
sent by rounds of negotiation in which the client and the
server attempt to find commits in common. If "false", Git will
server attempt to find commits in common. If `false`, Git will
rely solely on the server's ref advertisement to find commits
in common.
push.useBitmaps::
If set to "false", disable use of bitmaps for "git push" even if
`pack.useBitmaps` is "true", without preventing other git operations
from using bitmaps. Default is true.
`push.useBitmaps`::
If set to `false`, disable use of bitmaps for `git push` even if
`pack.useBitmaps` is `true`, without preventing other git operations
from using bitmaps. Default is `true`.
Loading