Skip to content

Commit 4c69a77

Browse files
committed
Autogenerated HTML docs for v2.50.1-271-gd30e1
1 parent 388f3b0 commit 4c69a77

11 files changed

+249
-46
lines changed

BreakingChanges.adoc

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,53 @@ Cf. <[email protected]>,
118118
119119
<CA+EOSBncr=4a4d8n9xS4FNehyebpmX8JiUwCsXD47EQDE+DiUQ@mail.gmail.com>.
120120

121+
* The default storage format for references in newly created repositories will
122+
be changed from "files" to "reftable". The "reftable" format provides
123+
multiple advantages over the "files" format:
124+
+
125+
** It is impossible to store two references that only differ in casing on
126+
case-insensitive filesystems with the "files" format. This issue is common
127+
on Windows and macOS platforms. As the "reftable" backend does not use
128+
filesystem paths to encode reference names this problem goes away.
129+
** Similarly, macOS normalizes path names that contain unicode characters,
130+
which has the consequence that you cannot store two names with unicode
131+
characters that are encoded differently with the "files" backend. Again,
132+
this is not an issue with the "reftable" backend.
133+
** Deleting references with the "files" backend requires Git to rewrite the
134+
complete "packed-refs" file. In large repositories with many references
135+
this file can easily be dozens of megabytes in size, in extreme cases it
136+
may be gigabytes. The "reftable" backend uses tombstone markers for
137+
deleted references and thus does not have to rewrite all of its data.
138+
** Repository housekeeping with the "files" backend typically performs
139+
all-into-one repacks of references. This can be quite expensive, and
140+
consequently housekeeping is a tradeoff between the number of loose
141+
references that accumulate and slow down operations that read references,
142+
and compressing those loose references into the "packed-refs" file. The
143+
"reftable" backend uses geometric compaction after every write, which
144+
amortizes costs and ensures that the backend is always in a
145+
well-maintained state.
146+
** Operations that write multiple references at once are not atomic with the
147+
"files" backend. Consequently, Git may see in-between states when it reads
148+
references while a reference transaction is in the process of being
149+
committed to disk.
150+
** Writing many references at once is slow with the "files" backend because
151+
every reference is created as a separate file. The "reftable" backend
152+
significantly outperforms the "files" backend by multiple orders of
153+
magnitude.
154+
** The reftable backend uses a binary format with prefix compression for
155+
reference names. As a result, the format uses less space compared to the
156+
"packed-refs" file.
157+
+
158+
Users that get immediate benefit from the "reftable" backend could continue to
159+
opt-in to the "reftable" format manually by setting the "init.defaultRefFormat"
160+
config. But defaults matter, and we think that overall users will have a better
161+
experience with less platform-specific quirks when they use the new backend by
162+
default.
163+
+
164+
A prerequisite for this change is that the ecosystem is ready to support the
165+
"reftable" format. Most importantly, alternative implementations of Git like
166+
JGit, libgit2 and Gitoxide need to support it.
167+
121168
=== Removals
122169

123170
* Support for grafting commits has long been superseded by git-replace(1).

BreakingChanges.html

Lines changed: 68 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -620,6 +620,73 @@ <h3 id="_changes">Changes</h3>
620620
</ul>
621621
</div>
622622
</li>
623+
<li>
624+
<p>The default storage format for references in newly created repositories will
625+
be changed from "files" to "reftable". The "reftable" format provides
626+
multiple advantages over the "files" format:</p>
627+
<div class="ulist">
628+
<ul>
629+
<li>
630+
<p>It is impossible to store two references that only differ in casing on
631+
case-insensitive filesystems with the "files" format. This issue is common
632+
on Windows and macOS platforms. As the "reftable" backend does not use
633+
filesystem paths to encode reference names this problem goes away.</p>
634+
</li>
635+
<li>
636+
<p>Similarly, macOS normalizes path names that contain unicode characters,
637+
which has the consequence that you cannot store two names with unicode
638+
characters that are encoded differently with the "files" backend. Again,
639+
this is not an issue with the "reftable" backend.</p>
640+
</li>
641+
<li>
642+
<p>Deleting references with the "files" backend requires Git to rewrite the
643+
complete "packed-refs" file. In large repositories with many references
644+
this file can easily be dozens of megabytes in size, in extreme cases it
645+
may be gigabytes. The "reftable" backend uses tombstone markers for
646+
deleted references and thus does not have to rewrite all of its data.</p>
647+
</li>
648+
<li>
649+
<p>Repository housekeeping with the "files" backend typically performs
650+
all-into-one repacks of references. This can be quite expensive, and
651+
consequently housekeeping is a tradeoff between the number of loose
652+
references that accumulate and slow down operations that read references,
653+
and compressing those loose references into the "packed-refs" file. The
654+
"reftable" backend uses geometric compaction after every write, which
655+
amortizes costs and ensures that the backend is always in a
656+
well-maintained state.</p>
657+
</li>
658+
<li>
659+
<p>Operations that write multiple references at once are not atomic with the
660+
"files" backend. Consequently, Git may see in-between states when it reads
661+
references while a reference transaction is in the process of being
662+
committed to disk.</p>
663+
</li>
664+
<li>
665+
<p>Writing many references at once is slow with the "files" backend because
666+
every reference is created as a separate file. The "reftable" backend
667+
significantly outperforms the "files" backend by multiple orders of
668+
magnitude.</p>
669+
</li>
670+
<li>
671+
<p>The reftable backend uses a binary format with prefix compression for
672+
reference names. As a result, the format uses less space compared to the
673+
"packed-refs" file.</p>
674+
<div class="paragraph">
675+
<p>Users that get immediate benefit from the "reftable" backend could continue to
676+
opt-in to the "reftable" format manually by setting the "init.defaultRefFormat"
677+
config. But defaults matter, and we think that overall users will have a better
678+
experience with less platform-specific quirks when they use the new backend by
679+
default.</p>
680+
</div>
681+
<div class="paragraph">
682+
<p>A prerequisite for this change is that the ecosystem is ready to support the
683+
"reftable" format. Most importantly, alternative implementations of Git like
684+
JGit, libgit2 and Gitoxide need to support it.</p>
685+
</div>
686+
</li>
687+
</ul>
688+
</div>
689+
</li>
623690
</ul>
624691
</div>
625692
</div>
@@ -758,7 +825,7 @@ <h2 id="_superseded_features_that_will_not_be_deprecated">Superseded features th
758825
</div>
759826
<div id="footer">
760827
<div id="footer-text">
761-
Last updated 2025-06-30 16:59:08 -0700
828+
Last updated 2025-07-14 12:11:05 -0700
762829
</div>
763830
</div>
764831
</body>

RelNotes/2.51.0.adoc

Lines changed: 55 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,13 @@ UI, Workflows & Features
4040
client, instead of retrying, it skipped it by mistake, which has
4141
been corrected.
4242

43+
* The reftable ref backend has matured enough; Git 3.0 will make it
44+
the default format in a newly created repositories by default.
45+
46+
* "netrc" credential helper has been improved to understand textual
47+
service names (like smtp) in addition to the numeric port numbers
48+
(like 25).
49+
4350

4451
Performance, Internal Implementation, Development Support etc.
4552
--------------------------------------------------------------
@@ -62,10 +69,26 @@ Performance, Internal Implementation, Development Support etc.
6269
6370
* A lot of stale stuff has been removed from the contrib/ hierarchy.
6471
72+
* "git push" and "git fetch" are taught to update refs in batches to
73+
gain performance.
74+
75+
* Some code paths in the "git prune" used to ignore passed in
76+
repository object and used the_repository singleton instance
77+
instead, which has been corrected.
78+
79+
* Update ".clang-format" and ".editorconfig" to match our style guide
80+
a bit better.
81+
82+
* "make coccicheck" succeeds even when spatch made suggestions, which
83+
has been updated to fail in such a case.
84+
6585
6686
Fixes since v2.50
6787
-----------------
6888

89+
Unless otherwise noted, all the changes in 2.50.X maintenance track,
90+
including security updates, are included in this release.
91+
6992
* A memory-leak in an error code path has been plugged.
7093
(merge 7082da85cb ly/commit-graph-graph-write-leakfix later to maint).
7194

@@ -111,8 +134,32 @@ Fixes since v2.50
111134
* Remove unnecessary check from "git daemon" code.
112135
(merge 0c856224d2 cb/daemon-fd-check-fix later to maint).
113136

114-
* Leakfix.
115-
(merge b0e9d25865 jk/fix-leak-send-pack later to maint).
137+
* Use of sysctl() system call to learn the total RAM size used on
138+
BSDs has been corrected.
139+
(merge 781c1cf571 cb/total-ram-bsd-fix later to maint).
140+
141+
* Drop FreeBSD 4 support and declare that we support only FreeBSD 12
142+
or later, which has memmem() supported.
143+
(merge 0392f976a7 bs/config-mak-freebsd later to maint).
144+
145+
* A diff-filter with negative-only specification like "git log
146+
--diff-filter=d" did not trigger correctly, which has been fixed.
147+
(merge 375ac087c5 jk/all-negative-diff-filter-fix later to maint).
148+
149+
* A failure to open the index file for writing due to conflicting
150+
access did not state what went wrong, which has been corrected.
151+
(merge 9455397a5c hy/read-cache-lock-error-fix later to maint).
152+
153+
* Tempfile removal fix in the codepath to sign commits with SSH keys.
154+
(merge 4498127b04 re/ssh-sign-buffer-fix later to maint).
155+
156+
* Code and test clean-up around string-list API.
157+
(merge 6e5b26c3ff sj/string-list later to maint).
158+
159+
* "git apply -N" should start from the current index and register
160+
only new files, but it instead started from an empty index, which
161+
has been corrected.
162+
(merge 2b49d97fcb rp/apply-intent-to-add-fix later to maint).
116163

117164
* Other code cleanup, docfix, build fix, etc.
118165
(merge b257adb571 lo/my-first-ow-doc-update later to maint).
@@ -130,3 +177,9 @@ Fixes since v2.50
130177
(merge ff73f375bb jg/mailinfo-leakfix later to maint).
131178
(merge 996f14c02b jj/doc-branch-markup-fix later to maint).
132179
(merge 1e77de1864 cb/ci-freebsd-update-to-14.3 later to maint).
180+
(merge b0e9d25865 jk/fix-leak-send-pack later to maint).
181+
(merge f3a9558c8c bs/remote-helpers-doc-markup-fix later to maint).
182+
(merge c4e9775c60 kh/doc-config-subcommands later to maint).
183+
(merge de404249ab ps/perlless-test-fixes later to maint).
184+
(merge 953049eed8 ts/merge-orig-head-doc-fix later to maint).
185+
(merge 0c83bbc704 rj/freebsd-sysinfo-build-fix later to maint).

git-apply.adoc

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -75,13 +75,14 @@ OPTIONS
7575
tree. If `--check` is in effect, merely check that it would
7676
apply cleanly to the index entry.
7777

78+
-N::
7879
--intent-to-add::
7980
When applying the patch only to the working tree, mark new
8081
files to be added to the index later (see `--intent-to-add`
81-
option in linkgit:git-add[1]). This option is ignored unless
82-
running in a Git repository and `--index` is not specified.
83-
Note that `--index` could be implied by other options such
84-
as `--cached` or `--3way`.
82+
option in linkgit:git-add[1]). This option is ignored if
83+
`--index` or `--cached` are used, and has no effect outside a Git
84+
repository. Note that `--index` could be implied by other options
85+
such as `--3way`.
8586

8687
-3::
8788
--3way::

git-apply.html

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -535,14 +535,15 @@ <h2 id="_options">OPTIONS</h2>
535535
tree. If <code>--check</code> is in effect, merely check that it would
536536
apply cleanly to the index entry.</p>
537537
</dd>
538+
<dt class="hdlist1">-N</dt>
538539
<dt class="hdlist1">--intent-to-add</dt>
539540
<dd>
540541
<p>When applying the patch only to the working tree, mark new
541542
files to be added to the index later (see <code>--intent-to-add</code>
542-
option in <a href="git-add.html">git-add(1)</a>). This option is ignored unless
543-
running in a Git repository and <code>--index</code> is not specified.
544-
Note that <code>--index</code> could be implied by other options such
545-
as <code>--cached</code> or <code>--3way</code>.</p>
543+
option in <a href="git-add.html">git-add(1)</a>). This option is ignored if
544+
<code>--index</code> or <code>--cached</code> are used, and has no effect outside a Git
545+
repository. Note that <code>--index</code> could be implied by other options
546+
such as <code>--3way</code>.</p>
546547
</dd>
547548
<dt class="hdlist1">-3</dt>
548549
<dt class="hdlist1">--3way</dt>
@@ -844,7 +845,7 @@ <h2 id="_git">GIT</h2>
844845
</div>
845846
<div id="footer">
846847
<div id="footer-text">
847-
Last updated 2025-02-14 21:38:14 -0800
848+
Last updated 2025-07-14 12:11:05 -0700
848849
</div>
849850
</div>
850851
</body>

git-config.adoc

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@ SYNOPSIS
1010
--------
1111
[verse]
1212
'git config list' [<file-option>] [<display-option>] [--includes]
13-
'git config get' [<file-option>] [<display-option>] [--includes] [--all] [--regexp] [--value=<value>] [--fixed-value] [--default=<default>] <name>
14-
'git config set' [<file-option>] [--type=<type>] [--all] [--value=<value>] [--fixed-value] <name> <value>
15-
'git config unset' [<file-option>] [--all] [--value=<value>] [--fixed-value] <name>
13+
'git config get' [<file-option>] [<display-option>] [--includes] [--all] [--regexp] [--value=<pattern>] [--fixed-value] [--default=<default>] [--url=<url>] <name>
14+
'git config set' [<file-option>] [--type=<type>] [--all] [--value=<pattern>] [--fixed-value] <name> <value>
15+
'git config unset' [<file-option>] [--all] [--value=<pattern>] [--fixed-value] <name>
1616
'git config rename-section' [<file-option>] <old-name> <new-name>
1717
'git config remove-section' [<file-option>] <name>
1818
'git config edit' [<file-option>]
@@ -26,7 +26,7 @@ escaped.
2626

2727
Multiple lines can be added to an option by using the `--append` option.
2828
If you want to update or unset an option which can occur on multiple
29-
lines, a `value-pattern` (which is an extended regular expression,
29+
lines, `--value=<pattern>` (which is an extended regular expression,
3030
unless the `--fixed-value` option is given) needs to be given. Only the
3131
existing values that match the pattern are updated or unset. If
3232
you want to handle the lines that do *not* match the pattern, just
@@ -109,7 +109,7 @@ OPTIONS
109109

110110
--replace-all::
111111
Default behavior is to replace at most one line. This replaces
112-
all lines matching the key (and optionally the `value-pattern`).
112+
all lines matching the key (and optionally `--value=<pattern>`).
113113

114114
--append::
115115
Adds a new line to the option without altering any existing
@@ -200,11 +200,19 @@ See also <<FILES>>.
200200
section in linkgit:gitrevisions[7] for a more complete list of
201201
ways to spell blob names.
202202

203+
`--value=<pattern>`::
204+
`--no-value`::
205+
With `get`, `set`, and `unset`, match only against
206+
_<pattern>_. The pattern is an extended regular expression unless
207+
`--fixed-value` is given.
208+
+
209+
Use `--no-value` to unset _<pattern>_.
210+
203211
--fixed-value::
204-
When used with the `value-pattern` argument, treat `value-pattern` as
212+
When used with `--value=<pattern>`, treat _<pattern>_ as
205213
an exact string instead of a regular expression. This will restrict
206214
the name/value pairs that are matched to only those where the value
207-
is exactly equal to the `value-pattern`.
215+
is exactly equal to _<pattern>_.
208216

209217
--type <type>::
210218
'git config' will ensure that any input or output is valid under the given
@@ -259,6 +267,12 @@ Valid `<type>`'s include:
259267
Output only the names of config variables for `list` or
260268
`get`.
261269

270+
`--show-names`::
271+
`--no-show-names`::
272+
With `get`, show config keys in addition to their values. The
273+
default is `--no-show-names` unless `--url` is given and there
274+
are no subsections in _<name>_.
275+
262276
--show-origin::
263277
Augment the output of all queried config options with the
264278
origin type (file, standard input, blob, command line) and

0 commit comments

Comments
 (0)