diff options
author | Junio C Hamano <gitster@pobox.com> | 2021-04-30 15:08:10 +0900 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2021-04-30 15:08:10 +0900 |
commit | 4078a55a6fb467915a2f03f271d1390b97eabc13 (patch) | |
tree | 94f9713738bf23d7a7bce9c87937558570412c71 | |
parent | 9877648272f630de87aeee2e3a8b7f4ac1ad9c70 (diff) | |
download | git-htmldocs-4078a55a6fb467915a2f03f271d1390b97eabc13.tar.gz |
Autogenerated HTML docs for v2.31.1-442-g7e391
238 files changed, 2142 insertions, 277 deletions
diff --git a/MyFirstContribution.html b/MyFirstContribution.html index 4d3d0c423..256cc3f98 100644 --- a/MyFirstContribution.html +++ b/MyFirstContribution.html @@ -1912,7 +1912,7 @@ should generate your diffs from <code><topic>..<mybranch></code> and <div id="footer">
<div id="footer-text">
Last updated
- 2021-02-10 15:27:55 PST
+ 2021-02-11 08:27:55 JST
</div>
</div>
</body>
diff --git a/MyFirstObjectWalk.html b/MyFirstObjectWalk.html index 602f9268d..bec13b7fb 100644 --- a/MyFirstObjectWalk.html +++ b/MyFirstObjectWalk.html @@ -1717,7 +1717,7 @@ Changed the display order of the filtered object walk <div id="footer">
<div id="footer-text">
Last updated
- 2020-12-08 16:10:07 PST
+ 2020-12-09 09:10:07 JST
</div>
</div>
</body>
diff --git a/RelNotes/2.32.0.txt b/RelNotes/2.32.0.txt index c746ad11c..f4e5191ae 100644 --- a/RelNotes/2.32.0.txt +++ b/RelNotes/2.32.0.txt @@ -75,6 +75,11 @@ UI, Workflows & Features * The command line completion (in contrib/) has learned that CHERRY_PICK_HEAD is a possible pseudo-ref. + * Userdiff patterns for "Scheme" has been added. + + * "git log" learned "--diff-merges=<style>" option, with an + associated configuration variable log.diffMerges. + Performance, Internal Implementation, Development Support etc. @@ -126,6 +131,24 @@ Performance, Internal Implementation, Development Support etc. primarily to enhance its test coverage (the strategy has been available as an explicit "-s ort" choice). + * A bit of code clean-up and a lot of test clean-up around userdiff + area. + + * Handling of "promisor packs" that allows certain objects to be + missing and lazily retrievable has been optimized (a bit). + + * When packet_write() fails, we gave an extra error message + unnecessarily, which has been corrected. + + * The checkout machinery has been taught to perform the actual + write-out of the files in parallel when able. + + * Show errno in the trace output in the error codepath that calls + read_raw_ref method. + + * Effort to make the command line completion (in contrib/) safe with + "set -u" continues. + Fixes since v2.31 ----------------- @@ -215,6 +238,30 @@ Fixes since v2.31 option. (merge c5c0548d79 vs/completion-with-set-u later to maint). + * When "git pack-objects" makes a literal copy of a part of existing + packfile using the reachability bitmaps, its update to the progress + meter was broken. + (merge 8e118e8490 jk/pack-objects-bitmap-progress-fix later to maint). + + * The dependencies for config-list.h and command-list.h were broken + when the former was split out of the latter, which has been + corrected. + (merge 56550ea718 sg/bugreport-fixes later to maint). + + * "git push --quiet --set-upstream" was not quiet when setting the + upstream branch configuration, which has been corrected. + (merge f3cce896a8 ow/push-quiet-set-upstream later to maint). + + * The prefetch task in "git maintenance" assumed that "git fetch" + from any remote would fetch all its local branches, which would + fetch too much if the user is interested in only a subset of + branches there. + (merge 32f67888d8 ds/maintenance-prefetch-fix later to maint). + + * Clarify that pathnames recorded in Git trees are most often (but + not necessarily) encoded in UTF-8. + (merge 9364bf465d ab/pathname-encoding-doc later to maint). + * Other code cleanup, docfix, build fix, etc. (merge f451960708 dl/cat-file-doc-cleanup later to maint). (merge 12604a8d0c sv/t9801-test-path-is-file-cleanup later to maint). @@ -229,3 +276,7 @@ Fixes since v2.31 (merge 28e29ee38b jc/doc-format-patch-clarify later to maint). (merge fc12b6fdde fm/user-manual-use-preface later to maint). (merge dba94e3a85 cc/test-helper-bloom-usage-fix later to maint). + (merge 61a7660516 hn/reftable-tables-doc-update later to maint). + (merge 81ed96a9b2 jt/fetch-pack-request-fix later to maint). + (merge 151b6c2dd7 jc/doc-do-not-capitalize-clarification later to maint). + (merge 9160068ac6 js/access-nul-emulation-on-windows later to maint). diff --git a/SubmittingPatches.html b/SubmittingPatches.html index 9ef70702a..f4f59235a 100644 --- a/SubmittingPatches.html +++ b/SubmittingPatches.html @@ -862,10 +862,13 @@ githooks.txt: improve the intro section </ul></div>
<div class="paragraph"><p>If in doubt which identifier to use, run <code>git log --no-merges</code> on the
files you are modifying to see the current conventions.</p></div>
-<div class="paragraph" id="summary-section"><p>It’s customary to start the remainder of the first line after "area: "
-with a lower-case letter. E.g. "doc: clarify…", not "doc:
-Clarify…", or "githooks.txt: improve…", not "githooks.txt:
-Improve…".</p></div>
+<div class="paragraph" id="summary-section"><p>The title sentence after the "area:" prefix omits the full stop at the
+end, and its first word is not capitalized unless there is a reason to
+capitalize it other than because it is the first word in the sentence.
+E.g. "doc: clarify…", not "doc: Clarify…", or "githooks.txt:
+improve…", not "githooks.txt: Improve…". But "refs: HEAD is also
+treated as a ref" is correct, as we spell <code>HEAD</code> in all caps even when
+it appears in the middle of a sentence.</p></div>
<div class="paragraph" id="meaningful-message"><p>The body should provide a meaningful commit message, which:</p></div>
<div class="olist arabic"><ol class="arabic">
<li>
@@ -1393,7 +1396,7 @@ this problem around.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2021-03-17 15:51:21 PDT
+ 2021-04-30 15:03:36 JST
</div>
</div>
</body>
diff --git a/SubmittingPatches.txt b/SubmittingPatches.txt index 0452db2e6..55287d72e 100644 --- a/SubmittingPatches.txt +++ b/SubmittingPatches.txt @@ -117,10 +117,13 @@ If in doubt which identifier to use, run `git log --no-merges` on the files you are modifying to see the current conventions. [[summary-section]] -It's customary to start the remainder of the first line after "area: " -with a lower-case letter. E.g. "doc: clarify...", not "doc: -Clarify...", or "githooks.txt: improve...", not "githooks.txt: -Improve...". +The title sentence after the "area:" prefix omits the full stop at the +end, and its first word is not capitalized unless there is a reason to +capitalize it other than because it is the first word in the sentence. +E.g. "doc: clarify...", not "doc: Clarify...", or "githooks.txt: +improve...", not "githooks.txt: Improve...". But "refs: HEAD is also +treated as a ref" is correct, as we spell `HEAD` in all caps even when +it appears in the middle of a sentence. [[meaningful-message]] The body should provide a meaningful commit message, which: diff --git a/diff-options.txt b/diff-options.txt index aa2b5c11f..530d11591 100644 --- a/diff-options.txt +++ b/diff-options.txt @@ -34,7 +34,7 @@ endif::git-diff[] endif::git-format-patch[] ifdef::git-log[] ---diff-merges=(off|none|first-parent|1|separate|m|combined|c|dense-combined|cc):: +--diff-merges=(off|none|on|first-parent|1|separate|m|combined|c|dense-combined|cc):: --no-diff-merges:: Specify diff format to be used for merge commits. Default is {diff-merges-default} unless `--first-parent` is in use, in which case @@ -45,17 +45,24 @@ ifdef::git-log[] Disable output of diffs for merge commits. Useful to override implied value. + +--diff-merges=on::: +--diff-merges=m::: +-m::: + This option makes diff output for merge commits to be shown in + the default format. `-m` will produce the output only if `-p` + is given as well. The default format could be changed using + `log.diffMerges` configuration parameter, which default value + is `separate`. ++ --diff-merges=first-parent::: --diff-merges=1::: This option makes merge commits show the full diff with respect to the first parent only. + --diff-merges=separate::: ---diff-merges=m::: --m::: This makes merge commits show the full diff with respect to each of the parents. Separate log entry and diff is generated - for each parent. `-m` doesn't produce any output without `-p`. + for each parent. + --diff-merges=combined::: --diff-merges=c::: @@ -293,11 +300,14 @@ explained for the configuration variable `core.quotePath` (see linkgit:git-config[1]). --name-only:: - Show only names of changed files. + Show only names of changed files. The file names are often encoded in UTF-8. + For more information see the discussion about encoding in the linkgit:git-log[1] + manual page. --name-status:: Show only names and status of changed files. See the description of the `--diff-filter` option on what the status letters mean. + Just like `--name-only` the file names are often encoded in UTF-8. --submodule[=<format>]:: Specify how differences in submodules are shown. When specifying diff --git a/everyday.html b/everyday.html index 171f2bec1..0c67470df 100644 --- a/everyday.html +++ b/everyday.html @@ -750,7 +750,7 @@ link you clicked to get here.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2016-05-17 15:26:41 PDT
+ 2016-05-18 07:26:41 JST
</div>
</div>
</body>
diff --git a/fetch-options.txt b/fetch-options.txt index 07783deee..9e7b4e189 100644 --- a/fetch-options.txt +++ b/fetch-options.txt @@ -110,6 +110,11 @@ ifndef::git-pull[] setting `fetch.writeCommitGraph`. endif::git-pull[] +--prefetch:: + Modify the configured refspec to place all refs into the + `refs/prefetch/` namespace. See the `prefetch` task in + linkgit:git-maintenance[1]. + -p:: --prune:: Before fetching, remove any remote-tracking references that no diff --git a/git-add.html b/git-add.html index 008a001fb..26a25289d 100644 --- a/git-add.html +++ b/git-add.html @@ -1375,7 +1375,7 @@ modifying the contents of context or removal lines <div id="footer">
<div id="footer-text">
Last updated
- 2020-03-10 08:03:13 PDT
+ 2020-03-11 00:03:13 JST
</div>
</div>
</body>
diff --git a/git-am.html b/git-am.html index d15e32b83..89b62e432 100644 --- a/git-am.html +++ b/git-am.html @@ -1198,7 +1198,7 @@ information.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2021-02-25 17:29:29 PST
+ 2021-02-26 10:29:29 JST
</div>
</div>
</body>
diff --git a/git-annotate.html b/git-annotate.html index 466b2d7cb..5df2facda 100644 --- a/git-annotate.html +++ b/git-annotate.html @@ -1070,7 +1070,7 @@ take effect.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2020-03-10 08:03:13 PDT
+ 2020-03-11 00:03:13 JST
</div>
</div>
</body>
diff --git a/git-apply.html b/git-apply.html index f7a3cd87a..3f9ab406f 100644 --- a/git-apply.html +++ b/git-apply.html @@ -1221,7 +1221,7 @@ subdirectory is checked and (if possible) updated.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2021-04-15 14:08:03 PDT
+ 2021-04-16 06:08:03 JST
</div>
</div>
</body>
diff --git a/git-archimport.html b/git-archimport.html index db7a8416c..6aac06b6e 100644 --- a/git-archimport.html +++ b/git-archimport.html @@ -905,7 +905,7 @@ patches that have been traded out-of-sequence between the branches.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2020-03-10 08:03:13 PDT
+ 2020-03-11 00:03:13 JST
</div>
</div>
</body>
diff --git a/git-archive.html b/git-archive.html index f2dd90a8c..41ecef3d0 100644 --- a/git-archive.html +++ b/git-archive.html @@ -1106,7 +1106,7 @@ while archiving any tree in your <code>$GIT_DIR/info/attributes</code> file.</p> <div id="footer">
<div id="footer-text">
Last updated
- 2020-10-05 15:17:53 PDT
+ 2020-10-06 07:17:53 JST
</div>
</div>
</body>
diff --git a/git-bisect.html b/git-bisect.html index 2c963dc00..229244459 100644 --- a/git-bisect.html +++ b/git-bisect.html @@ -1240,7 +1240,7 @@ help</code> or <code>git bisect -h</code> to get a long usage description.</p></ <div id="footer">
<div id="footer-text">
Last updated
- 2020-09-03 13:19:53 PDT
+ 2020-09-04 05:19:53 JST
</div>
</div>
</body>
diff --git a/git-blame.html b/git-blame.html index 796138435..dff2c14cc 100644 --- a/git-blame.html +++ b/git-blame.html @@ -1365,7 +1365,7 @@ commit commentary), a blame viewer will not care.</td> <div id="footer">
<div id="footer-text">
Last updated
- 2021-01-25 15:29:19 PST
+ 2021-01-26 08:29:19 JST
</div>
</div>
</body>
diff --git a/git-branch.html b/git-branch.html index 455198c69..c8ee1f6fe 100644 --- a/git-branch.html +++ b/git-branch.html @@ -1397,7 +1397,7 @@ a branch?”</a> in the Git User’s Manual.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2021-02-25 17:29:29 PST
+ 2021-02-26 10:29:29 JST
</div>
</div>
</body>
diff --git a/git-bugreport.html b/git-bugreport.html index caf04f5ce..92482e850 100644 --- a/git-bugreport.html +++ b/git-bugreport.html @@ -856,7 +856,7 @@ the kind of information listed above when manually asking for help.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2020-06-08 18:30:54 PDT
+ 2020-06-09 10:30:54 JST
</div>
</div>
</body>
diff --git a/git-bundle.html b/git-bundle.html index a93337548..9ce142573 100644 --- a/git-bundle.html +++ b/git-bundle.html @@ -1046,7 +1046,7 @@ references when fetching:</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2020-08-11 18:39:25 PDT
+ 2020-08-12 10:39:25 JST
</div>
</div>
</body>
diff --git a/git-cat-file.html b/git-cat-file.html index 93762990a..45d717def 100644 --- a/git-cat-file.html +++ b/git-cat-file.html @@ -1186,7 +1186,7 @@ will be reported.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2021-03-22 14:17:33 PDT
+ 2021-03-23 06:17:33 JST
</div>
</div>
</body>
diff --git a/git-check-attr.html b/git-check-attr.html index 731e57d14..c4c38fe6f 100644 --- a/git-check-attr.html +++ b/git-check-attr.html @@ -960,7 +960,7 @@ README: caveat: unspecified</code></pre> <div id="footer">
<div id="footer-text">
Last updated
- 2020-03-10 08:03:13 PDT
+ 2020-03-11 00:03:13 JST
</div>
</div>
</body>
diff --git a/git-check-ignore.html b/git-check-ignore.html index 0b792ee81..8c3f2f54e 100644 --- a/git-check-ignore.html +++ b/git-check-ignore.html @@ -924,7 +924,7 @@ buffer.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2020-03-10 08:03:13 PDT
+ 2020-03-11 00:03:13 JST
</div>
</div>
</body>
diff --git a/git-check-mailmap.html b/git-check-mailmap.html index db4d1bd8b..7bf7df549 100644 --- a/git-check-mailmap.html +++ b/git-check-mailmap.html @@ -811,7 +811,7 @@ to specify a custom <code>.mailmap</code> target file or object.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2021-01-25 15:29:19 PST
+ 2021-01-26 08:29:19 JST
</div>
</div>
</body>
diff --git a/git-check-ref-format.html b/git-check-ref-format.html index c721c116e..bb6ed365f 100644 --- a/git-check-ref-format.html +++ b/git-check-ref-format.html @@ -963,7 +963,7 @@ Determine the reference name to use for a new branch: <div id="footer">
<div id="footer-text">
Last updated
- 2020-03-10 08:03:13 PDT
+ 2020-03-11 00:03:13 JST
</div>
</div>
</body>
diff --git a/git-checkout-index.html b/git-checkout-index.html index 291b33e96..160aa1fd8 100644 --- a/git-checkout-index.html +++ b/git-checkout-index.html @@ -1009,7 +1009,7 @@ into the file <code>.merged-Makefile</code>.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2013-08-20 08:40:27 PDT
+ 2013-08-21 00:40:27 JST
</div>
</div>
</body>
diff --git a/git-checkout.html b/git-checkout.html index 4afa59e7e..b3f96d3a0 100644 --- a/git-checkout.html +++ b/git-checkout.html @@ -1560,7 +1560,7 @@ $ git add frotz</code></pre> <div id="footer">
<div id="footer-text">
Last updated
- 2020-10-27 15:58:27 PDT
+ 2020-10-28 07:58:27 JST
</div>
</div>
</body>
diff --git a/git-cherry-pick.html b/git-cherry-pick.html index 4390f65cd..3527697d7 100644 --- a/git-cherry-pick.html +++ b/git-cherry-pick.html @@ -1212,7 +1212,7 @@ try to apply the change introduced by <code>topic^</code> again, <div id="footer">
<div id="footer-text">
Last updated
- 2020-11-02 14:02:22 PST
+ 2020-11-03 07:02:22 JST
</div>
</div>
</body>
diff --git a/git-cherry.html b/git-cherry.html index 4dcf809b3..4ec5d2b59 100644 --- a/git-cherry.html +++ b/git-cherry.html @@ -915,7 +915,7 @@ between <code>base</code> and <code>topic</code>:</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2013-12-12 16:55:14 PST
+ 2013-12-13 09:55:14 JST
</div>
</div>
</body>
diff --git a/git-citool.html b/git-citool.html index 846b53aab..5bd454eea 100644 --- a/git-citool.html +++ b/git-citool.html @@ -776,7 +776,7 @@ See <a href="git-gui.html">git-gui(1)</a> for more details.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2013-08-20 08:40:27 PDT
+ 2013-08-21 00:40:27 JST
</div>
</div>
</body>
diff --git a/git-clean.html b/git-clean.html index bcd2c6ad2..f65917044 100644 --- a/git-clean.html +++ b/git-clean.html @@ -973,7 +973,7 @@ help <div id="footer">
<div id="footer-text">
Last updated
- 2020-03-10 08:03:13 PDT
+ 2020-03-11 00:03:13 JST
</div>
</div>
</body>
diff --git a/git-clone.html b/git-clone.html index 0acf3e828..56f36da0f 100644 --- a/git-clone.html +++ b/git-clone.html @@ -1430,7 +1430,7 @@ Create a bare repository to publish your changes to the public: <div id="footer">
<div id="footer-text">
Last updated
- 2021-04-08 14:45:29 PDT
+ 2021-04-09 06:45:29 JST
</div>
</div>
</body>
diff --git a/git-column.html b/git-column.html index b36d79d10..e8b1ec3e1 100644 --- a/git-column.html +++ b/git-column.html @@ -873,7 +873,7 @@ v2.4.8 v2.4.9</code></pre> <div id="footer">
<div id="footer-text">
Last updated
- 2020-03-10 08:03:13 PDT
+ 2020-03-11 00:03:13 JST
</div>
</div>
</body>
diff --git a/git-commit-graph.html b/git-commit-graph.html index de21e2ae7..a087d1dcd 100644 --- a/git-commit-graph.html +++ b/git-commit-graph.html @@ -940,7 +940,7 @@ Write a commit-graph file containing all commits in the current <div id="footer">
<div id="footer-text">
Last updated
- 2020-11-02 14:02:22 PST
+ 2020-11-03 07:02:22 JST
</div>
</div>
</body>
diff --git a/git-commit-tree.html b/git-commit-tree.html index dadb3d61d..659248af5 100644 --- a/git-commit-tree.html +++ b/git-commit-tree.html @@ -1029,7 +1029,7 @@ reversible operation.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2020-04-22 14:37:28 PDT
+ 2020-04-23 06:37:28 JST
</div>
</div>
</body>
diff --git a/git-commit.html b/git-commit.html index 6b6c0e418..db33aaa62 100644 --- a/git-commit.html +++ b/git-commit.html @@ -1780,7 +1780,7 @@ information.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2021-04-07 17:16:19 PDT
+ 2021-04-08 09:16:19 JST
</div>
</div>
</body>
diff --git a/git-config.html b/git-config.html index 9b29bc85a..6eecdd531 100644 --- a/git-config.html +++ b/git-config.html @@ -3430,6 +3430,36 @@ checkout.guess </p>
</dd>
<dt class="hdlist1">
+checkout.workers
+</dt>
+<dd>
+<p>
+ The number of parallel workers to use when updating the working tree.
+ The default is one, i.e. sequential execution. If set to a value less
+ than one, Git will use as many workers as the number of logical cores
+ available. This setting and <code>checkout.thresholdForParallelism</code> affect
+ all commands that perform checkout. E.g. checkout, clone, reset,
+ sparse-checkout, etc.
+</p>
+<div class="paragraph"><p>Note: parallel checkout usually delivers better performance for repositories
+located on SSDs or over NFS. For repositories on spinning disks and/or machines
+with a small number of cores, the default sequential checkout often performs
+better. The size and compression level of a repository might also influence how
+well the parallel version performs.</p></div>
+</dd>
+<dt class="hdlist1">
+checkout.thresholdForParallelism
+</dt>
+<dd>
+<p>
+ When running parallel checkout with a small number of files, the cost
+ of subprocess spawning and inter-process communication might outweigh
+ the parallelization gains. This setting allows to define the minimum
+ number of files for which parallel checkout should be attempted. The
+ default is 100.
+</p>
+</dd>
+<dt class="hdlist1">
clean.requireForce
</dt>
<dd>
@@ -6819,6 +6849,16 @@ index.recordOffsetTable </p>
</dd>
<dt class="hdlist1">
+index.sparse
+</dt>
+<dd>
+<p>
+ When enabled, write the index using sparse-directory entries. This
+ has no effect unless <code>core.sparseCheckout</code> and
+ <code>core.sparseCheckoutCone</code> are both enabled. Defaults to <em>false</em>.
+</p>
+</dd>
+<dt class="hdlist1">
index.threads
</dt>
<dd>
@@ -6979,6 +7019,16 @@ log.excludeDecoration </p>
</dd>
<dt class="hdlist1">
+log.diffMerges
+</dt>
+<dd>
+<p>
+ Set default diff format to be used for merge commits. See
+ <code>--diff-merges</code> in <a href="git-log.html">git-log(1)</a> for details.
+ Defaults to <code>separate</code>.
+</p>
+</dd>
+<dt class="hdlist1">
log.follow
</dt>
<dd>
@@ -10307,7 +10357,7 @@ looks like</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2021-01-25 15:29:19 PST
+ 2021-01-26 08:29:19 JST
</div>
</div>
</body>
diff --git a/git-count-objects.html b/git-count-objects.html index 8a2f46e2c..ce501f8f6 100644 --- a/git-count-objects.html +++ b/git-count-objects.html @@ -815,7 +815,7 @@ Print sizes in human readable format <div id="footer">
<div id="footer-text">
Last updated
- 2016-10-17 15:22:26 PDT
+ 2016-10-18 07:22:26 JST
</div>
</div>
</body>
diff --git a/git-credential-cache--daemon.html b/git-credential-cache--daemon.html index adcefeca4..4abd8d951 100644 --- a/git-credential-cache--daemon.html +++ b/git-credential-cache--daemon.html @@ -786,7 +786,7 @@ begun listening for clients.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2014-09-26 15:36:58 PDT
+ 2014-09-27 07:36:58 JST
</div>
</div>
</body>
diff --git a/git-credential-cache.html b/git-credential-cache.html index b7129542d..b70c45f75 100644 --- a/git-credential-cache.html +++ b/git-credential-cache.html @@ -842,7 +842,7 @@ variable (this example drops the cache time to 5 minutes):</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2020-03-10 08:03:13 PDT
+ 2020-03-11 00:03:13 JST
</div>
</div>
</body>
diff --git a/git-credential-store.html b/git-credential-store.html index a506e17cc..04bf7c8e3 100644 --- a/git-credential-store.html +++ b/git-credential-store.html @@ -882,7 +882,7 @@ for more information.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2020-05-08 15:24:24 PDT
+ 2020-05-09 07:24:24 JST
</div>
</div>
</body>
diff --git a/git-credential.html b/git-credential.html index 525cd660e..e6ed8551d 100644 --- a/git-credential.html +++ b/git-credential.html @@ -940,7 +940,7 @@ username in the example above) will be left unset.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2020-05-26 11:29:03 PDT
+ 2020-05-27 03:29:03 JST
</div>
</div>
</body>
diff --git a/git-cvsexportcommit.html b/git-cvsexportcommit.html index 3b74804ce..1c8cc477f 100644 --- a/git-cvsexportcommit.html +++ b/git-cvsexportcommit.html @@ -951,7 +951,7 @@ $ git cherry cvshead myhead | sed -n 's/^+ //p' | xargs -l1 git cvsexportcommit <div id="footer">
<div id="footer-text">
Last updated
- 2013-08-20 08:40:27 PDT
+ 2013-08-21 00:40:27 JST
</div>
</div>
</body>
diff --git a/git-cvsimport.html b/git-cvsimport.html index 780ed1bb8..e6c31e8c2 100644 --- a/git-cvsimport.html +++ b/git-cvsimport.html @@ -1107,7 +1107,7 @@ cvs2git (part of cvs2svn), <code>http://subversion.apache.org/</code> <div id="footer">
<div id="footer-text">
Last updated
- 2016-09-26 16:43:51 PDT
+ 2016-09-27 08:43:51 JST
</div>
</div>
</body>
diff --git a/git-cvsserver.html b/git-cvsserver.html index 46260426c..326ef5d16 100644 --- a/git-cvsserver.html +++ b/git-cvsserver.html @@ -1313,7 +1313,7 @@ and <code>gitcvs.allBinary</code> to "guess".</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2020-03-10 08:03:13 PDT
+ 2020-03-11 00:03:13 JST
</div>
</div>
</body>
diff --git a/git-daemon.html b/git-daemon.html index 3db96108a..e51fd0e89 100644 --- a/git-daemon.html +++ b/git-daemon.html @@ -1280,7 +1280,7 @@ services are performed.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2020-03-10 08:03:13 PDT
+ 2020-03-11 00:03:13 JST
</div>
</div>
</body>
diff --git a/git-describe.html b/git-describe.html index cfaf589d8..206ff9c61 100644 --- a/git-describe.html +++ b/git-describe.html @@ -1038,7 +1038,7 @@ tag being favorable.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2020-03-10 08:03:13 PDT
+ 2020-03-11 00:03:13 JST
</div>
</div>
</body>
diff --git a/git-diff-files.html b/git-diff-files.html index 3c9ea32b8..072671cc1 100644 --- a/git-diff-files.html +++ b/git-diff-files.html @@ -1142,7 +1142,9 @@ explained for the configuration variable <code>core.quotePath</code> (see </dt>
<dd>
<p>
- Show only names of changed files.
+ Show only names of changed files. The file names are often encoded in UTF-8.
+ For more information see the discussion about encoding in the <a href="git-log.html">git-log(1)</a>
+ manual page.
</p>
</dd>
<dt class="hdlist1">
@@ -1152,6 +1154,7 @@ explained for the configuration variable <code>core.quotePath</code> (see <p>
Show only names and status of changed files. See the description
of the <code>--diff-filter</code> option on what the status letters mean.
+ Just like <code>--name-only</code> the file names are often encoded in UTF-8.
</p>
</dd>
<dt class="hdlist1">
@@ -2689,7 +2692,7 @@ the pathname, but if that is <code>NUL</code>, the record will show two paths.</ <div id="footer">
<div id="footer-text">
Last updated
- 2013-08-20 08:40:27 PDT
+ 2013-08-21 00:40:27 JST
</div>
</div>
</body>
diff --git a/git-diff-index.html b/git-diff-index.html index 6bae1816a..f78cd1afb 100644 --- a/git-diff-index.html +++ b/git-diff-index.html @@ -1143,7 +1143,9 @@ explained for the configuration variable <code>core.quotePath</code> (see </dt>
<dd>
<p>
- Show only names of changed files.
+ Show only names of changed files. The file names are often encoded in UTF-8.
+ For more information see the discussion about encoding in the <a href="git-log.html">git-log(1)</a>
+ manual page.
</p>
</dd>
<dt class="hdlist1">
@@ -1153,6 +1155,7 @@ explained for the configuration variable <code>core.quotePath</code> (see <p>
Show only names and status of changed files. See the description
of the <code>--diff-filter</code> option on what the status letters mean.
+ Just like <code>--name-only</code> the file names are often encoded in UTF-8.
</p>
</dd>
<dt class="hdlist1">
@@ -2783,7 +2786,7 @@ always have the special all-zero sha1.</td> <div id="footer">
<div id="footer-text">
Last updated
- 2020-11-02 14:02:22 PST
+ 2020-11-03 07:02:22 JST
</div>
</div>
</body>
diff --git a/git-diff-tree.html b/git-diff-tree.html index fc76e7b03..4d144de26 100644 --- a/git-diff-tree.html +++ b/git-diff-tree.html @@ -1144,7 +1144,9 @@ explained for the configuration variable <code>core.quotePath</code> (see </dt>
<dd>
<p>
- Show only names of changed files.
+ Show only names of changed files. The file names are often encoded in UTF-8.
+ For more information see the discussion about encoding in the <a href="git-log.html">git-log(1)</a>
+ manual page.
</p>
</dd>
<dt class="hdlist1">
@@ -1154,6 +1156,7 @@ explained for the configuration variable <code>core.quotePath</code> (see <p>
Show only names and status of changed files. See the description
of the <code>--diff-filter</code> option on what the status letters mean.
+ Just like <code>--name-only</code> the file names are often encoded in UTF-8.
</p>
</dd>
<dt class="hdlist1">
@@ -3926,7 +3929,7 @@ the pathname, but if that is <code>NUL</code>, the record will show two paths.</ <div id="footer">
<div id="footer-text">
Last updated
- 2020-11-02 14:02:22 PST
+ 2020-11-03 07:02:22 JST
</div>
</div>
</body>
diff --git a/git-diff.html b/git-diff.html index 2320b66df..7cbaef3c2 100644 --- a/git-diff.html +++ b/git-diff.html @@ -1272,7 +1272,9 @@ explained for the configuration variable <code>core.quotePath</code> (see </dt>
<dd>
<p>
- Show only names of changed files.
+ Show only names of changed files. The file names are often encoded in UTF-8.
+ For more information see the discussion about encoding in the <a href="git-log.html">git-log(1)</a>
+ manual page.
</p>
</dd>
<dt class="hdlist1">
@@ -1282,6 +1284,7 @@ explained for the configuration variable <code>core.quotePath</code> (see <p>
Show only names and status of changed files. See the description
of the <code>--diff-filter</code> option on what the status letters mean.
+ Just like <code>--name-only</code> the file names are often encoded in UTF-8.
</p>
</dd>
<dt class="hdlist1">
@@ -2980,7 +2983,7 @@ Output diff in reverse. <div id="footer">
<div id="footer-text">
Last updated
- 2020-11-02 14:02:22 PST
+ 2020-11-03 07:02:22 JST
</div>
</div>
</body>
diff --git a/git-difftool.html b/git-difftool.html index 2893f527a..2fdee3cf3 100644 --- a/git-difftool.html +++ b/git-difftool.html @@ -1024,7 +1024,7 @@ difftool.trustExitCode <div id="footer">
<div id="footer-text">
Last updated
- 2021-02-25 17:29:29 PST
+ 2021-02-26 10:29:29 JST
</div>
</div>
</body>
diff --git a/git-fast-export.html b/git-fast-export.html index 08958f95f..de0bb2ec9 100644 --- a/git-fast-export.html +++ b/git-fast-export.html @@ -1120,7 +1120,7 @@ a tag referencing a tree instead of a commit.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2020-07-06 22:33:22 PDT
+ 2020-07-07 14:33:22 JST
</div>
</div>
</body>
diff --git a/git-fast-import.html b/git-fast-import.html index 53381ed80..bc7a7b692 100644 --- a/git-fast-import.html +++ b/git-fast-import.html @@ -2616,7 +2616,7 @@ compression.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2020-10-05 15:17:53 PDT
+ 2020-10-06 07:17:53 JST
</div>
</div>
</body>
diff --git a/git-fetch-pack.html b/git-fetch-pack.html index e2450015b..dca1071e6 100644 --- a/git-fetch-pack.html +++ b/git-fetch-pack.html @@ -974,7 +974,7 @@ they may alternatively be 40-hex sha1s present on the remote.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2020-03-10 08:03:13 PDT
+ 2020-03-11 00:03:13 JST
</div>
</div>
</body>
diff --git a/git-fetch.html b/git-fetch.html index 06880c6fd..465003548 100644 --- a/git-fetch.html +++ b/git-fetch.html @@ -978,6 +978,16 @@ documented in <a href="git-config.html">git-config(1)</a>.</p></div> </p>
</dd>
<dt class="hdlist1">
+--prefetch
+</dt>
+<dd>
+<p>
+ Modify the configured refspec to place all refs into the
+ <code>refs/prefetch/</code> namespace. See the <code>prefetch</code> task in
+ <a href="git-maintenance.html">git-maintenance(1)</a>.
+</p>
+</dd>
+<dt class="hdlist1">
-p
</dt>
<dt class="hdlist1">
@@ -1977,7 +1987,7 @@ version.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2020-09-03 13:19:53 PDT
+ 2020-09-04 05:19:53 JST
</div>
</div>
</body>
diff --git a/git-filter-branch.html b/git-filter-branch.html index 66001c7ab..06843da99 100644 --- a/git-filter-branch.html +++ b/git-filter-branch.html @@ -1626,7 +1626,7 @@ To top it all off, even when users finally find working commands, <div id="footer">
<div id="footer-text">
Last updated
- 2020-10-26 15:41:26 PDT
+ 2020-10-27 07:41:26 JST
</div>
</div>
</body>
diff --git a/git-fmt-merge-msg.html b/git-fmt-merge-msg.html index 7c4537354..1953b1084 100644 --- a/git-fmt-merge-msg.html +++ b/git-fmt-merge-msg.html @@ -908,7 +908,7 @@ the "origin" remote.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2020-03-10 08:03:13 PDT
+ 2020-03-11 00:03:13 JST
</div>
</div>
</body>
diff --git a/git-for-each-ref.html b/git-for-each-ref.html index 0dbb45fa5..2f3699cad 100644 --- a/git-for-each-ref.html +++ b/git-for-each-ref.html @@ -1324,7 +1324,7 @@ commits and from none of the <code>--no-merged</code> commits are shown.</p></di <div id="footer">
<div id="footer-text">
Last updated
- 2021-03-02 23:05:01 PST
+ 2021-03-03 16:05:01 JST
</div>
</div>
</body>
diff --git a/git-for-each-repo.html b/git-for-each-repo.html index b724dd7c9..453016c43 100644 --- a/git-for-each-repo.html +++ b/git-for-each-repo.html @@ -812,7 +812,7 @@ descriptors <code>stdin</code>, <code>stdout</code>, and <code>stderr</code>.</p <div id="footer">
<div id="footer-text">
Last updated
- 2020-11-18 14:12:24 PST
+ 2020-11-19 07:12:24 JST
</div>
</div>
</body>
diff --git a/git-format-patch.html b/git-format-patch.html index 964cd671b..a61d3cdb5 100644 --- a/git-format-patch.html +++ b/git-format-patch.html @@ -2554,7 +2554,7 @@ Extract three topmost commits from the current branch and format them <div id="footer">
<div id="footer-text">
Last updated
- 2021-04-02 15:10:10 PDT
+ 2021-04-03 07:10:10 JST
</div>
</div>
</body>
diff --git a/git-fsck-objects.html b/git-fsck-objects.html index 8129b86c4..cc977b3f5 100644 --- a/git-fsck-objects.html +++ b/git-fsck-objects.html @@ -772,7 +772,7 @@ documentation of that command.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2013-08-20 08:40:27 PDT
+ 2013-08-21 00:40:27 JST
</div>
</div>
</body>
diff --git a/git-fsck.html b/git-fsck.html index de2d0fc31..fe40cf78b 100644 --- a/git-fsck.html +++ b/git-fsck.html @@ -1103,7 +1103,7 @@ GIT_ALTERNATE_OBJECT_DIRECTORIES <div id="footer">
<div id="footer-text">
Last updated
- 2021-02-03 16:00:11 PST
+ 2021-02-04 09:00:11 JST
</div>
</div>
</body>
diff --git a/git-gc.html b/git-gc.html index f974a07f4..501d032b3 100644 --- a/git-gc.html +++ b/git-gc.html @@ -1165,7 +1165,7 @@ seems to be low in practice).</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2021-02-25 17:29:29 PST
+ 2021-02-26 10:29:29 JST
</div>
</div>
</body>
diff --git a/git-get-tar-commit-id.html b/git-get-tar-commit-id.html index ee2ecbc8e..184ed9fc8 100644 --- a/git-get-tar-commit-id.html +++ b/git-get-tar-commit-id.html @@ -778,7 +778,7 @@ a tree ID instead of a commit ID or tag.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2015-10-26 16:13:38 PDT
+ 2015-10-27 08:13:38 JST
</div>
</div>
</body>
diff --git a/git-grep.html b/git-grep.html index 4940851e8..5686c91bb 100644 --- a/git-grep.html +++ b/git-grep.html @@ -1469,7 +1469,7 @@ performance in this case, it might be desirable to use <code>--threads=1</code>. <div id="footer">
<div id="footer-text">
Last updated
- 2020-11-18 14:12:24 PST
+ 2020-11-19 07:12:24 JST
</div>
</div>
</body>
diff --git a/git-gui.html b/git-gui.html index 62a6760c2..688e6d7b8 100644 --- a/git-gui.html +++ b/git-gui.html @@ -945,7 +945,7 @@ of end users.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2020-03-10 08:03:13 PDT
+ 2020-03-11 00:03:13 JST
</div>
</div>
</body>
diff --git a/git-hash-object.html b/git-hash-object.html index 0e8535c2d..80eff48d1 100644 --- a/git-hash-object.html +++ b/git-hash-object.html @@ -853,7 +853,7 @@ When <type> is not specified, it defaults to "blob".</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2020-03-10 08:03:13 PDT
+ 2020-03-11 00:03:13 JST
</div>
</div>
</body>
diff --git a/git-help.html b/git-help.html index d677482b0..904e7f084 100644 --- a/git-help.html +++ b/git-help.html @@ -1011,7 +1011,7 @@ See <a href="git-config.html">git-config(1)</a> for more information about this. <div id="footer">
<div id="footer-text">
Last updated
- 2020-08-10 16:30:08 PDT
+ 2020-08-11 08:30:08 JST
</div>
</div>
</body>
diff --git a/git-http-backend.html b/git-http-backend.html index b5a7421a9..c3be17b5a 100644 --- a/git-http-backend.html +++ b/git-http-backend.html @@ -1079,7 +1079,7 @@ invoked by the <em>git-receive-pack</em>.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2020-03-10 08:03:13 PDT
+ 2020-03-11 00:03:13 JST
</div>
</div>
</body>
diff --git a/git-http-fetch.html b/git-http-fetch.html index 7e4411ab1..20437cfbd 100644 --- a/git-http-fetch.html +++ b/git-http-fetch.html @@ -860,7 +860,7 @@ commit-id <div id="footer">
<div id="footer-text">
Last updated
- 2021-03-02 23:05:01 PST
+ 2021-03-03 16:05:01 JST
</div>
</div>
</body>
diff --git a/git-http-push.html b/git-http-push.html index d0db43c4f..ba80273c2 100644 --- a/git-http-push.html +++ b/git-http-push.html @@ -909,7 +909,7 @@ to disable the fast-forward check only on that ref.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2020-03-10 08:03:13 PDT
+ 2020-03-11 00:03:13 JST
</div>
</div>
</body>
diff --git a/git-imap-send.html b/git-imap-send.html index 565ae0ff9..a7bd8f55d 100644 --- a/git-imap-send.html +++ b/git-imap-send.html @@ -1025,7 +1025,7 @@ users may wish to visit this web page for more information: <div id="footer">
<div id="footer-text">
Last updated
- 2020-09-09 15:23:32 PDT
+ 2020-09-10 07:23:32 JST
</div>
</div>
</body>
diff --git a/git-index-pack.html b/git-index-pack.html index 6169e4ae2..168ac5c92 100644 --- a/git-index-pack.html +++ b/git-index-pack.html @@ -958,7 +958,7 @@ mentioned above.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2021-03-02 23:05:01 PST
+ 2021-03-03 16:05:01 JST
</div>
</div>
</body>
diff --git a/git-init-db.html b/git-init-db.html index 5eae98f7e..ad273603c 100644 --- a/git-init-db.html +++ b/git-init-db.html @@ -772,7 +772,7 @@ documentation of that command.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2013-08-20 08:40:27 PDT
+ 2013-08-21 00:40:27 JST
</div>
</div>
</body>
diff --git a/git-init.html b/git-init.html index 2db5bed47..55213016c 100644 --- a/git-init.html +++ b/git-init.html @@ -1003,7 +1003,7 @@ Record the pristine state as the first commit in the history. <div id="footer">
<div id="footer-text">
Last updated
- 2020-12-18 16:26:08 PST
+ 2020-12-19 09:26:08 JST
</div>
</div>
</body>
diff --git a/git-instaweb.html b/git-instaweb.html index 31f3bc21b..3fdec6bad 100644 --- a/git-instaweb.html +++ b/git-instaweb.html @@ -907,7 +907,7 @@ restart <div id="footer">
<div id="footer-text">
Last updated
- 2020-03-10 08:03:13 PDT
+ 2020-03-11 00:03:13 JST
</div>
</div>
</body>
diff --git a/git-interpret-trailers.html b/git-interpret-trailers.html index 1fdaa2596..19fea0387 100644 --- a/git-interpret-trailers.html +++ b/git-interpret-trailers.html @@ -1255,7 +1255,7 @@ $ chmod +x .git/hooks/commit-msg</code></pre> <div id="footer">
<div id="footer-text">
Last updated
- 2020-03-10 08:03:13 PDT
+ 2020-03-11 00:03:13 JST
</div>
</div>
</body>
diff --git a/git-log.html b/git-log.html index 78a53414d..64e863173 100644 --- a/git-log.html +++ b/git-log.html @@ -3408,7 +3408,7 @@ the default format.</p></div> </p>
</dd>
<dt class="hdlist1">
---diff-merges=(off|none|first-parent|1|separate|m|combined|c|dense-combined|cc)
+--diff-merges=(off|none|on|first-parent|1|separate|m|combined|c|dense-combined|cc)
</dt>
<dt class="hdlist1">
--no-diff-merges
@@ -3433,6 +3433,24 @@ the default format.</p></div> </p>
</dd>
<dt class="hdlist1">
+--diff-merges=on
+</dt>
+<dt class="hdlist1">
+--diff-merges=m
+</dt>
+<dt class="hdlist1">
+-m
+</dt>
+<dd>
+<p>
+ This option makes diff output for merge commits to be shown in
+ the default format. <code>-m</code> will produce the output only if <code>-p</code>
+ is given as well. The default format could be changed using
+ <code>log.diffMerges</code> configuration parameter, which default value
+ is <code>separate</code>.
+</p>
+</dd>
+<dt class="hdlist1">
--diff-merges=first-parent
</dt>
<dt class="hdlist1">
@@ -3447,17 +3465,11 @@ the default format.</p></div> <dt class="hdlist1">
--diff-merges=separate
</dt>
-<dt class="hdlist1">
---diff-merges=m
-</dt>
-<dt class="hdlist1">
--m
-</dt>
<dd>
<p>
This makes merge commits show the full diff with respect to
each of the parents. Separate log entry and diff is generated
- for each parent. <code>-m</code> doesn’t produce any output without <code>-p</code>.
+ for each parent.
</p>
</dd>
<dt class="hdlist1">
@@ -3872,7 +3884,9 @@ explained for the configuration variable <code>core.quotePath</code> (see </dt>
<dd>
<p>
- Show only names of changed files.
+ Show only names of changed files. The file names are often encoded in UTF-8.
+ For more information see the discussion about encoding in the <a href="git-log.html">git-log(1)</a>
+ manual page.
</p>
</dd>
<dt class="hdlist1">
@@ -3882,6 +3896,7 @@ explained for the configuration variable <code>core.quotePath</code> (see <p>
Show only names and status of changed files. See the description
of the <code>--diff-filter</code> option on what the status letters mean.
+ Just like <code>--name-only</code> the file names are often encoded in UTF-8.
</p>
</dd>
<dt class="hdlist1">
@@ -5279,7 +5294,7 @@ and overridden by the <code>--notes=<ref></code> option.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2021-02-05 17:34:58 PST
+ 2021-02-06 10:34:58 JST
</div>
</div>
</body>
diff --git a/git-ls-files.html b/git-ls-files.html index 27c7e3152..815792a9d 100644 --- a/git-ls-files.html +++ b/git-ls-files.html @@ -1231,7 +1231,7 @@ pattern file appears in.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2021-02-05 17:34:58 PST
+ 2021-02-06 10:34:58 JST
</div>
</div>
</body>
diff --git a/git-ls-remote.html b/git-ls-remote.html index 39d26f9b8..b9ad170d1 100644 --- a/git-ls-remote.html +++ b/git-ls-remote.html @@ -945,7 +945,7 @@ c5db5456ae3b0873fc659c19fafdde22313cc441 refs/tags/v0.99.2 <div id="footer">
<div id="footer-text">
Last updated
- 2020-07-06 22:33:22 PDT
+ 2020-07-07 14:33:22 JST
</div>
</div>
</body>
diff --git a/git-ls-tree.html b/git-ls-tree.html index f0c4203c2..024ca461b 100644 --- a/git-ls-tree.html +++ b/git-ls-tree.html @@ -930,7 +930,7 @@ verbatim and the line is terminated by a NUL byte.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2020-11-11 14:07:52 PST
+ 2020-11-12 07:07:52 JST
</div>
</div>
</body>
diff --git a/git-mailinfo.html b/git-mailinfo.html index 1d78c7a19..44df23174 100644 --- a/git-mailinfo.html +++ b/git-mailinfo.html @@ -914,7 +914,7 @@ beginning of the proposed commit log message with a scissors line.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2021-02-25 17:29:29 PST
+ 2021-02-26 10:29:29 JST
</div>
</div>
</body>
diff --git a/git-mailsplit.html b/git-mailsplit.html index ee8c8c6b2..7887ef44c 100644 --- a/git-mailsplit.html +++ b/git-mailsplit.html @@ -860,7 +860,7 @@ patches in the correct order.</td> <div id="footer">
<div id="footer-text">
Last updated
- 2016-07-06 14:33:48 PDT
+ 2016-07-07 06:33:48 JST
</div>
</div>
</body>
diff --git a/git-maintenance.html b/git-maintenance.html index 639b907bd..434b53a6e 100644 --- a/git-maintenance.html +++ b/git-maintenance.html @@ -893,10 +893,8 @@ prefetch <p>
The <code>prefetch</code> task updates the object directory with the latest
objects from all registered remotes. For each remote, a <code>git fetch</code>
- command is run. The refmap is custom to avoid updating local or remote
- branches (those in <code>refs/heads</code> or <code>refs/remotes</code>). Instead, the
- remote refs are stored in <code>refs/prefetch/<remote>/</code>. Also, tags are
- not updated.
+ command is run. The configured refspec is modified to place all
+ requested refs within <code>refs/prefetch/</code>. Also, tags are not updated.
</p>
<div class="paragraph"><p>This is done to avoid disrupting the remote-tracking branches. The end users
expect these refs to stay unmoved unless they initiate a fetch. With prefetch
@@ -1186,7 +1184,7 @@ custom tasks.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2021-02-22 16:54:23 PST
+ 2021-04-30 15:03:30 JST
</div>
</div>
</body>
diff --git a/git-maintenance.txt b/git-maintenance.txt index 80ddd33ce..1e738ad39 100644 --- a/git-maintenance.txt +++ b/git-maintenance.txt @@ -92,10 +92,8 @@ commit-graph:: prefetch:: The `prefetch` task updates the object directory with the latest objects from all registered remotes. For each remote, a `git fetch` - command is run. The refmap is custom to avoid updating local or remote - branches (those in `refs/heads` or `refs/remotes`). Instead, the - remote refs are stored in `refs/prefetch/<remote>/`. Also, tags are - not updated. + command is run. The configured refspec is modified to place all + requested refs within `refs/prefetch/`. Also, tags are not updated. + This is done to avoid disrupting the remote-tracking branches. The end users expect these refs to stay unmoved unless they initiate a fetch. With prefetch diff --git a/git-merge-base.html b/git-merge-base.html index a7a4e37f4..9af4c0183 100644 --- a/git-merge-base.html +++ b/git-merge-base.html @@ -1017,7 +1017,7 @@ commits that used to be at the tip of origin/master).</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2020-03-10 08:03:13 PDT
+ 2020-03-11 00:03:13 JST
</div>
</div>
</body>
diff --git a/git-merge-file.html b/git-merge-file.html index a1a9f85d5..129e443df 100644 --- a/git-merge-file.html +++ b/git-merge-file.html @@ -886,7 +886,7 @@ implements all of RCS <em>merge</em>'s functionality which is needed by <div id="footer">
<div id="footer-text">
Last updated
- 2015-10-30 14:57:17 PDT
+ 2015-10-31 06:57:17 JST
</div>
</div>
</body>
diff --git a/git-merge-index.html b/git-merge-index.html index dbf458509..441bedce6 100644 --- a/git-merge-index.html +++ b/git-merge-index.html @@ -852,7 +852,7 @@ for the AA file, because it didn’t exist in the original, and thus <div id="footer">
<div id="footer-text">
Last updated
- 2020-03-10 08:03:13 PDT
+ 2020-03-11 00:03:13 JST
</div>
</div>
</body>
diff --git a/git-merge-one-file.html b/git-merge-one-file.html index dd931f0e1..414cb47f5 100644 --- a/git-merge-one-file.html +++ b/git-merge-one-file.html @@ -772,7 +772,7 @@ to resolve a merge after the trivial merge done with <em>git read-tree -m</em>.< <div id="footer">
<div id="footer-text">
Last updated
- 2013-08-20 08:40:27 PDT
+ 2013-08-21 00:40:27 JST
</div>
</div>
</body>
diff --git a/git-merge-tree.html b/git-merge-tree.html index 5fb42b318..ef0164830 100644 --- a/git-merge-tree.html +++ b/git-merge-tree.html @@ -779,7 +779,7 @@ entries that match the <branch1> tree.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2013-09-17 14:33:14 PDT
+ 2013-09-18 06:33:14 JST
</div>
</div>
</body>
diff --git a/git-merge.html b/git-merge.html index ea93660f2..e5fa08d72 100644 --- a/git-merge.html +++ b/git-merge.html @@ -2151,7 +2151,7 @@ branch.<name>.mergeOptions <div id="footer">
<div id="footer-text">
Last updated
- 2020-05-08 15:24:24 PDT
+ 2020-05-09 07:24:24 JST
</div>
</div>
</body>
diff --git a/git-mergetool--lib.html b/git-mergetool--lib.html index 258a1aac3..5c143ff7a 100644 --- a/git-mergetool--lib.html +++ b/git-mergetool--lib.html @@ -832,7 +832,7 @@ run_merge_tool <div id="footer">
<div id="footer-text">
Last updated
- 2021-02-22 16:54:23 PST
+ 2021-02-23 09:54:23 JST
</div>
</div>
</body>
diff --git a/git-mergetool.html b/git-mergetool.html index bcb571579..4ef89ba9f 100644 --- a/git-mergetool.html +++ b/git-mergetool.html @@ -1047,7 +1047,7 @@ are successfully merged.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2021-03-17 15:50:25 PDT
+ 2021-03-18 07:50:25 JST
</div>
</div>
</body>
diff --git a/git-mktag.html b/git-mktag.html index f3f61f978..d6c6a964c 100644 --- a/git-mktag.html +++ b/git-mktag.html @@ -828,7 +828,7 @@ care about, but that can be verified with gpg.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2021-01-25 15:29:19 PST
+ 2021-01-26 08:29:19 JST
</div>
</div>
</body>
diff --git a/git-mktree.html b/git-mktree.html index afe9e70f5..dadc3a1c2 100644 --- a/git-mktree.html +++ b/git-mktree.html @@ -811,7 +811,7 @@ built is written to the standard output.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2020-03-10 08:03:13 PDT
+ 2020-03-11 00:03:13 JST
</div>
</div>
</body>
diff --git a/git-multi-pack-index.html b/git-multi-pack-index.html index 004a6ec2d..e96cee7cc 100644 --- a/git-multi-pack-index.html +++ b/git-multi-pack-index.html @@ -911,7 +911,7 @@ Format</a> for more information on the multi-pack-index feature.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2021-04-08 14:45:29 PDT
+ 2021-04-09 06:45:29 JST
</div>
</div>
</body>
diff --git a/git-mv.html b/git-mv.html index 2af0eeeca..7296c02cd 100644 --- a/git-mv.html +++ b/git-mv.html @@ -857,7 +857,7 @@ been implemented.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2016-07-13 14:58:50 PDT
+ 2016-07-14 06:58:50 JST
</div>
</div>
</body>
diff --git a/git-name-rev.html b/git-name-rev.html index 7899797dd..c39d70209 100644 --- a/git-name-rev.html +++ b/git-name-rev.html @@ -881,7 +881,7 @@ not the context.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2020-03-10 08:03:13 PDT
+ 2020-03-11 00:03:13 JST
</div>
</div>
</body>
diff --git a/git-notes.html b/git-notes.html index e478629a7..47a1cc789 100644 --- a/git-notes.html +++ b/git-notes.html @@ -1344,7 +1344,7 @@ on the <code>notes.rewrite.<command></code> and <code>notes.rewriteRef</co <div id="footer">
<div id="footer-text">
Last updated
- 2020-08-10 16:30:08 PDT
+ 2020-08-11 08:30:08 JST
</div>
</div>
</body>
diff --git a/git-p4.html b/git-p4.html index cf1543f62..3efbc7031 100644 --- a/git-p4.html +++ b/git-p4.html @@ -1923,7 +1923,7 @@ Each commit imported by <em>git p4</em> has a line at the end of the log <div id="footer">
<div id="footer-text">
Last updated
- 2021-01-15 16:12:09 PST
+ 2021-01-16 09:12:09 JST
</div>
</div>
</body>
diff --git a/git-pack-objects.html b/git-pack-objects.html index 336b392ff..bfafb4521 100644 --- a/git-pack-objects.html +++ b/git-pack-objects.html @@ -1352,7 +1352,7 @@ attribute <code>delta</code> set to false.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2021-03-24 15:15:46 PDT
+ 2021-03-25 07:15:46 JST
</div>
</div>
</body>
diff --git a/git-pack-redundant.html b/git-pack-redundant.html index 525ee9c71..ab3e0b287 100644 --- a/git-pack-redundant.html +++ b/git-pack-redundant.html @@ -819,7 +819,7 @@ git pack-redundant --all | xargs rm</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2013-08-20 08:40:27 PDT
+ 2013-08-21 00:40:27 JST
</div>
</div>
</body>
diff --git a/git-pack-refs.html b/git-pack-refs.html index e0982e62a..830cde08d 100644 --- a/git-pack-refs.html +++ b/git-pack-refs.html @@ -831,7 +831,7 @@ exists" when it means "branch <branch> exists".</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2013-08-20 08:40:27 PDT
+ 2013-08-21 00:40:27 JST
</div>
</div>
</body>
diff --git a/git-patch-id.html b/git-patch-id.html index 92a22625c..a167a9ffc 100644 --- a/git-patch-id.html +++ b/git-patch-id.html @@ -837,7 +837,7 @@ Result is different from the value produced by git 1.9 and older <div id="footer">
<div id="footer-text">
Last updated
- 2017-08-04 09:39:17 PDT
+ 2017-08-05 01:39:17 JST
</div>
</div>
</body>
diff --git a/git-prune-packed.html b/git-prune-packed.html index 1c6596829..59534cc42 100644 --- a/git-prune-packed.html +++ b/git-prune-packed.html @@ -814,7 +814,7 @@ disk storage, etc.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2014-10-20 14:13:43 PDT
+ 2014-10-21 06:13:43 JST
</div>
</div>
</body>
diff --git a/git-prune.html b/git-prune.html index ed4711b45..f6ef946b8 100644 --- a/git-prune.html +++ b/git-prune.html @@ -884,7 +884,7 @@ many other housekeeping tasks.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2020-03-10 08:03:13 PDT
+ 2020-03-11 00:03:13 JST
</div>
</div>
</body>
diff --git a/git-pull.html b/git-pull.html index 77222c0e2..78f9bdf4f 100644 --- a/git-pull.html +++ b/git-pull.html @@ -1314,6 +1314,16 @@ documented in <a href="git-config.html">git-config(1)</a>.</p></div> </p>
</dd>
<dt class="hdlist1">
+--prefetch
+</dt>
+<dd>
+<p>
+ Modify the configured refspec to place all refs into the
+ <code>refs/prefetch/</code> namespace. See the <code>prefetch</code> task in
+ <a href="git-maintenance.html">git-maintenance(1)</a>.
+</p>
+</dd>
+<dt class="hdlist1">
-p
</dt>
<dt class="hdlist1">
@@ -2240,7 +2250,7 @@ version.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2020-04-29 16:59:10 PDT
+ 2020-04-30 08:59:10 JST
</div>
</div>
</body>
diff --git a/git-push.html b/git-push.html index 3b375790d..e999b6d2d 100644 --- a/git-push.html +++ b/git-push.html @@ -1971,7 +1971,7 @@ As in #1, the attacker chooses an object ID X to steal. The victim sends <div id="footer">
<div id="footer-text">
Last updated
- 2021-03-24 15:15:46 PDT
+ 2021-03-25 07:15:46 JST
</div>
</div>
</body>
diff --git a/git-quiltimport.html b/git-quiltimport.html index 2c0bb55dc..05612c5d4 100644 --- a/git-quiltimport.html +++ b/git-quiltimport.html @@ -841,7 +841,7 @@ variable.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2020-03-10 08:03:13 PDT
+ 2020-03-11 00:03:13 JST
</div>
</div>
</body>
diff --git a/git-range-diff.html b/git-range-diff.html index b6232ce15..806beb6a1 100644 --- a/git-range-diff.html +++ b/git-range-diff.html @@ -1082,7 +1082,7 @@ found in this case will look like this:</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2021-02-22 16:54:23 PST
+ 2021-02-23 09:54:23 JST
</div>
</div>
</body>
diff --git a/git-read-tree.html b/git-read-tree.html index 267719604..f25f73256 100644 --- a/git-read-tree.html +++ b/git-read-tree.html @@ -1306,7 +1306,7 @@ support.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2020-04-29 14:18:27 PDT
+ 2020-04-30 06:18:27 JST
</div>
</div>
</body>
diff --git a/git-rebase.html b/git-rebase.html index 467b503fa..b5821bf35 100644 --- a/git-rebase.html +++ b/git-rebase.html @@ -2758,7 +2758,7 @@ Use <code>--rebase-merges</code> in such scenarios instead.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2021-03-26 15:44:23 PDT
+ 2021-03-27 07:44:23 JST
</div>
</div>
</body>
diff --git a/git-receive-pack.html b/git-receive-pack.html index 5dadab0fa..033693c60 100644 --- a/git-receive-pack.html +++ b/git-receive-pack.html @@ -1084,7 +1084,7 @@ The <code>pre-receive</code> hook MUST NOT update any refs to point to <div id="footer">
<div id="footer-text">
Last updated
- 2020-03-10 08:03:13 PDT
+ 2020-03-11 00:03:13 JST
</div>
</div>
</body>
diff --git a/git-reflog.html b/git-reflog.html index c2661482e..ff3bf776c 100644 --- a/git-reflog.html +++ b/git-reflog.html @@ -929,7 +929,7 @@ used with <code>expire</code>.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2020-03-10 08:03:13 PDT
+ 2020-03-11 00:03:13 JST
</div>
</div>
</body>
diff --git a/git-remote-ext.html b/git-remote-ext.html index fdb9d8cfd..aa4966a90 100644 --- a/git-remote-ext.html +++ b/git-remote-ext.html @@ -963,7 +963,7 @@ begins with <code>ext::</code>. Examples:</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2020-03-10 08:03:13 PDT
+ 2020-03-11 00:03:13 JST
</div>
</div>
</body>
diff --git a/git-remote-fd.html b/git-remote-fd.html index 37b6f48e6..71dd63794 100644 --- a/git-remote-fd.html +++ b/git-remote-fd.html @@ -843,7 +843,7 @@ GIT_TRANSLOOP_DEBUG <div id="footer">
<div id="footer-text">
Last updated
- 2020-03-10 08:03:13 PDT
+ 2020-03-11 00:03:13 JST
</div>
</div>
</body>
diff --git a/git-remote-helpers.html b/git-remote-helpers.html index 050593480..6c3c40859 100644 --- a/git-remote-helpers.html +++ b/git-remote-helpers.html @@ -750,7 +750,7 @@ link you clicked to get here.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2020-03-10 08:03:13 PDT
+ 2020-03-11 00:03:13 JST
</div>
</div>
</body>
diff --git a/git-remote.html b/git-remote.html index 51129fe29..99b4e3959 100644 --- a/git-remote.html +++ b/git-remote.html @@ -1055,7 +1055,7 @@ $ git merge origin</code></pre> <div id="footer">
<div id="footer-text">
Last updated
- 2020-11-09 14:46:20 PST
+ 2020-11-10 07:46:20 JST
</div>
</div>
</body>
diff --git a/git-repack.html b/git-repack.html index 807d41359..980cffdc0 100644 --- a/git-repack.html +++ b/git-repack.html @@ -1070,7 +1070,7 @@ attribute <code>delta</code> set to false.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2021-03-24 15:15:46 PDT
+ 2021-03-25 07:15:46 JST
</div>
</div>
</body>
diff --git a/git-replace.html b/git-replace.html index 625cd6e7a..b323b6c14 100644 --- a/git-replace.html +++ b/git-replace.html @@ -971,7 +971,7 @@ pending objects.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2020-03-10 08:03:13 PDT
+ 2020-03-11 00:03:13 JST
</div>
</div>
</body>
diff --git a/git-request-pull.html b/git-request-pull.html index 1251abb3f..22a238a52 100644 --- a/git-request-pull.html +++ b/git-request-pull.html @@ -855,7 +855,7 @@ the one you have locally, e.g.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2020-03-10 08:03:13 PDT
+ 2020-03-11 00:03:13 JST
</div>
</div>
</body>
diff --git a/git-rerere.html b/git-rerere.html index f1e658090..48c829377 100644 --- a/git-rerere.html +++ b/git-rerere.html @@ -990,7 +990,7 @@ setting in <a href="gitattributes.html">gitattributes(5)</a> can be used.</p></d <div id="footer">
<div id="footer-text">
Last updated
- 2020-03-10 08:03:13 PDT
+ 2020-03-11 00:03:13 JST
</div>
</div>
</body>
diff --git a/git-reset.html b/git-reset.html index 83c4f8186..6c3e38f55 100644 --- a/git-reset.html +++ b/git-reset.html @@ -1499,7 +1499,7 @@ entries:</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2020-04-29 14:18:27 PDT
+ 2020-04-30 06:18:27 JST
</div>
</div>
</body>
diff --git a/git-restore.html b/git-restore.html index a60693b22..a434323f6 100644 --- a/git-restore.html +++ b/git-restore.html @@ -1074,7 +1074,7 @@ as using <a href="git-checkout.html">git-checkout(1)</a>)</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2020-10-27 15:58:27 PDT
+ 2020-10-28 07:58:27 JST
</div>
</div>
</body>
diff --git a/git-rev-list.html b/git-rev-list.html index f6c134e87..ed49781fb 100644 --- a/git-rev-list.html +++ b/git-rev-list.html @@ -3593,7 +3593,7 @@ Compare the on-disk size of branches in one group of refs, excluding <div id="footer">
<div id="footer-text">
Last updated
- 2021-02-25 17:29:29 PST
+ 2021-02-26 10:29:29 JST
</div>
</div>
</body>
diff --git a/git-rev-parse.html b/git-rev-parse.html index 6ab289921..e6739d667 100644 --- a/git-rev-parse.html +++ b/git-rev-parse.html @@ -2045,7 +2045,7 @@ Similar to above: <div id="footer">
<div id="footer-text">
Last updated
- 2021-01-15 16:12:09 PST
+ 2021-01-16 09:12:09 JST
</div>
</div>
</body>
diff --git a/git-revert.html b/git-revert.html index 89486b53c..f54097314 100644 --- a/git-revert.html +++ b/git-revert.html @@ -1022,7 +1022,7 @@ effect to your index in a row.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2020-11-02 14:02:22 PST
+ 2020-11-03 07:02:22 JST
</div>
</div>
</body>
diff --git a/git-rm.html b/git-rm.html index 28d8f953a..9298e1410 100644 --- a/git-rm.html +++ b/git-rm.html @@ -1020,7 +1020,7 @@ obsolete when recursive submodule update has been implemented.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2020-03-10 08:03:13 PDT
+ 2020-03-11 00:03:13 JST
</div>
</div>
</body>
diff --git a/git-send-email.html b/git-send-email.html index c603a2712..eabc3b5d8 100644 --- a/git-send-email.html +++ b/git-send-email.html @@ -1631,7 +1631,7 @@ Authen::SASL and Mail::Address.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2021-01-25 15:29:19 PST
+ 2021-01-26 08:29:19 JST
</div>
</div>
</body>
diff --git a/git-send-pack.html b/git-send-pack.html index dd2ef9067..40cf93ec8 100644 --- a/git-send-pack.html +++ b/git-send-pack.html @@ -993,7 +993,7 @@ to disable the fast-forward check only on that ref.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2020-03-10 08:03:13 PDT
+ 2020-03-11 00:03:13 JST
</div>
</div>
</body>
diff --git a/git-sh-i18n--envsubst.html b/git-sh-i18n--envsubst.html index a49bda3e4..43c4f7a97 100644 --- a/git-sh-i18n--envsubst.html +++ b/git-sh-i18n--envsubst.html @@ -785,7 +785,7 @@ of Git. Don’t use it.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2013-08-20 08:40:27 PDT
+ 2013-08-21 00:40:27 JST
</div>
</div>
</body>
diff --git a/git-sh-i18n.html b/git-sh-i18n.html index 603089ee8..34972a083 100644 --- a/git-sh-i18n.html +++ b/git-sh-i18n.html @@ -807,7 +807,7 @@ eval_gettext <div id="footer">
<div id="footer-text">
Last updated
- 2013-08-20 08:40:27 PDT
+ 2013-08-21 00:40:27 JST
</div>
</div>
</body>
diff --git a/git-sh-setup.html b/git-sh-setup.html index 5c19dca78..4c369bcdb 100644 --- a/git-sh-setup.html +++ b/git-sh-setup.html @@ -902,7 +902,7 @@ create_virtual_base <div id="footer">
<div id="footer-text">
Last updated
- 2016-06-27 11:04:05 PDT
+ 2016-06-28 03:04:05 JST
</div>
</div>
</body>
diff --git a/git-shell.html b/git-shell.html index dba884723..d9938c325 100644 --- a/git-shell.html +++ b/git-shell.html @@ -873,7 +873,7 @@ contrib/git-shell-commands/README</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2020-03-10 08:03:13 PDT
+ 2020-03-11 00:03:13 JST
</div>
</div>
</body>
diff --git a/git-shortlog.html b/git-shortlog.html index e46788ebc..54b38ab37 100644 --- a/git-shortlog.html +++ b/git-shortlog.html @@ -1956,7 +1956,7 @@ the current directory.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2021-02-22 16:54:23 PST
+ 2021-02-23 09:54:23 JST
</div>
</div>
</body>
diff --git a/git-show-branch.html b/git-show-branch.html index fd929862c..5577bd934 100644 --- a/git-show-branch.html +++ b/git-show-branch.html @@ -1047,7 +1047,7 @@ topologically related with each other.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2020-03-10 08:03:13 PDT
+ 2020-03-11 00:03:13 JST
</div>
</div>
</body>
diff --git a/git-show-index.html b/git-show-index.html index 0a158ccd1..bd1226469 100644 --- a/git-show-index.html +++ b/git-show-index.html @@ -824,7 +824,7 @@ repositories may change in backwards-incompatible ways. Only use <div id="footer">
<div id="footer-text">
Last updated
- 2020-08-24 15:54:20 PDT
+ 2020-08-25 07:54:20 JST
</div>
</div>
</body>
diff --git a/git-show-ref.html b/git-show-ref.html index 7f58a664d..046742c61 100644 --- a/git-show-ref.html +++ b/git-show-ref.html @@ -977,7 +977,7 @@ flag, so you can do</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2020-03-10 08:03:13 PDT
+ 2020-03-11 00:03:13 JST
</div>
</div>
</body>
diff --git a/git-show.html b/git-show.html index 3c4fdcedb..a7ba39e7f 100644 --- a/git-show.html +++ b/git-show.html @@ -1934,7 +1934,7 @@ diff output.</p></div> </p>
</dd>
<dt class="hdlist1">
---diff-merges=(off|none|first-parent|1|separate|m|combined|c|dense-combined|cc)
+--diff-merges=(off|none|on|first-parent|1|separate|m|combined|c|dense-combined|cc)
</dt>
<dt class="hdlist1">
--no-diff-merges
@@ -1959,6 +1959,24 @@ diff output.</p></div> </p>
</dd>
<dt class="hdlist1">
+--diff-merges=on
+</dt>
+<dt class="hdlist1">
+--diff-merges=m
+</dt>
+<dt class="hdlist1">
+-m
+</dt>
+<dd>
+<p>
+ This option makes diff output for merge commits to be shown in
+ the default format. <code>-m</code> will produce the output only if <code>-p</code>
+ is given as well. The default format could be changed using
+ <code>log.diffMerges</code> configuration parameter, which default value
+ is <code>separate</code>.
+</p>
+</dd>
+<dt class="hdlist1">
--diff-merges=first-parent
</dt>
<dt class="hdlist1">
@@ -1973,17 +1991,11 @@ diff output.</p></div> <dt class="hdlist1">
--diff-merges=separate
</dt>
-<dt class="hdlist1">
---diff-merges=m
-</dt>
-<dt class="hdlist1">
--m
-</dt>
<dd>
<p>
This makes merge commits show the full diff with respect to
each of the parents. Separate log entry and diff is generated
- for each parent. <code>-m</code> doesn’t produce any output without <code>-p</code>.
+ for each parent.
</p>
</dd>
<dt class="hdlist1">
@@ -2398,7 +2410,9 @@ explained for the configuration variable <code>core.quotePath</code> (see </dt>
<dd>
<p>
- Show only names of changed files.
+ Show only names of changed files. The file names are often encoded in UTF-8.
+ For more information see the discussion about encoding in the <a href="git-log.html">git-log(1)</a>
+ manual page.
</p>
</dd>
<dt class="hdlist1">
@@ -2408,6 +2422,7 @@ explained for the configuration variable <code>core.quotePath</code> (see <p>
Show only names and status of changed files. See the description
of the <code>--diff-filter</code> option on what the status letters mean.
+ Just like <code>--name-only</code> the file names are often encoded in UTF-8.
</p>
</dd>
<dt class="hdlist1">
@@ -3658,7 +3673,7 @@ reversible operation.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2021-02-05 17:34:58 PST
+ 2021-02-06 10:34:58 JST
</div>
</div>
</body>
diff --git a/git-sparse-checkout.html b/git-sparse-checkout.html index 893530ec2..3181cc4f2 100644 --- a/git-sparse-checkout.html +++ b/git-sparse-checkout.html @@ -794,6 +794,18 @@ THE FUTURE.</p></div> <div class="paragraph"><p>When <code>--cone</code> is provided, the <code>core.sparseCheckoutCone</code> setting is
also set, allowing for better performance with a limited set of
patterns (see <em>CONE PATTERN SET</em> below).</p></div>
+<div class="paragraph"><p>Use the <code>--[no-]sparse-index</code> option to toggle the use of the sparse
+index format. This reduces the size of the index to be more closely
+aligned with your sparse-checkout definition. This can have significant
+performance advantages for commands such as <code>git status</code> or <code>git add</code>.
+This feature is still experimental. Some commands might be slower with
+a sparse index until they are properly integrated with the feature.</p></div>
+<div class="paragraph"><p><strong>WARNING:</strong> Using a sparse index requires modifying the index in a way
+that is not completely understood by external tools. If you have trouble
+with this compatibility, then run <code>git sparse-checkout init --no-sparse-index</code>
+to rewrite your index to not be sparse. Older versions of Git will not
+understand the sparse directory entries index extension and may fail to
+interact with your repository until it is disabled.</p></div>
</dd>
<dt class="hdlist1">
<em>set</em>
@@ -1009,7 +1021,7 @@ of these restrictions.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2020-06-22 16:55:13 PDT
+ 2021-04-30 15:03:30 JST
</div>
</div>
</body>
diff --git a/git-sparse-checkout.txt b/git-sparse-checkout.txt index a0eeaeb02..fdcf43f87 100644 --- a/git-sparse-checkout.txt +++ b/git-sparse-checkout.txt @@ -45,6 +45,20 @@ To avoid interfering with other worktrees, it first enables the When `--cone` is provided, the `core.sparseCheckoutCone` setting is also set, allowing for better performance with a limited set of patterns (see 'CONE PATTERN SET' below). ++ +Use the `--[no-]sparse-index` option to toggle the use of the sparse +index format. This reduces the size of the index to be more closely +aligned with your sparse-checkout definition. This can have significant +performance advantages for commands such as `git status` or `git add`. +This feature is still experimental. Some commands might be slower with +a sparse index until they are properly integrated with the feature. ++ +**WARNING:** Using a sparse index requires modifying the index in a way +that is not completely understood by external tools. If you have trouble +with this compatibility, then run `git sparse-checkout init --no-sparse-index` +to rewrite your index to not be sparse. Older versions of Git will not +understand the sparse directory entries index extension and may fail to +interact with your repository until it is disabled. 'set':: Write a set of patterns to the sparse-checkout file, as given as diff --git a/git-stage.html b/git-stage.html index 506e61267..6c2d9766f 100644 --- a/git-stage.html +++ b/git-stage.html @@ -772,7 +772,7 @@ documentation of that command.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2014-10-20 14:13:43 PDT
+ 2014-10-21 06:13:43 JST
</div>
</div>
</body>
diff --git a/git-stash.html b/git-stash.html index 9318b1295..d95469df2 100644 --- a/git-stash.html +++ b/git-stash.html @@ -1245,7 +1245,7 @@ xargs git log --merges --no-walk --grep=WIP</code></pre> <div id="footer">
<div id="footer-text">
Last updated
- 2021-03-22 14:17:33 PDT
+ 2021-03-23 06:17:33 JST
</div>
</div>
</body>
diff --git a/git-status.html b/git-status.html index 8035b752f..f4623f827 100644 --- a/git-status.html +++ b/git-status.html @@ -1361,7 +1361,7 @@ using <code>git --no-optional-locks status</code> (see <a href="git.html">git(1) <div id="footer">
<div id="footer-text">
Last updated
- 2021-02-25 17:29:29 PST
+ 2021-02-26 10:29:29 JST
</div>
</div>
</body>
diff --git a/git-stripspace.html b/git-stripspace.html index 8b27dd56e..4db3ac353 100644 --- a/git-stripspace.html +++ b/git-stripspace.html @@ -876,7 +876,7 @@ the repository.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2015-10-26 16:13:38 PDT
+ 2015-10-27 08:13:38 JST
</div>
</div>
</body>
diff --git a/git-submodule.html b/git-submodule.html index c32b9a4a3..11bfd8261 100644 --- a/git-submodule.html +++ b/git-submodule.html @@ -1407,7 +1407,7 @@ for details.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2020-07-06 22:33:22 PDT
+ 2020-07-07 14:33:22 JST
</div>
</div>
</body>
diff --git a/git-svn.html b/git-svn.html index c1984855a..490412dee 100644 --- a/git-svn.html +++ b/git-svn.html @@ -2517,7 +2517,7 @@ rewinds it.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2020-11-02 14:02:22 PST
+ 2020-11-03 07:02:22 JST
</div>
</div>
</body>
diff --git a/git-switch.html b/git-switch.html index d27186cf3..22a818061 100644 --- a/git-switch.html +++ b/git-switch.html @@ -1127,7 +1127,7 @@ always create a new name for it (without switching away):</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2020-10-27 15:58:27 PDT
+ 2020-10-28 07:58:27 JST
</div>
</div>
</body>
diff --git a/git-symbolic-ref.html b/git-symbolic-ref.html index 426453791..a83bb9bb5 100644 --- a/git-symbolic-ref.html +++ b/git-symbolic-ref.html @@ -847,7 +847,7 @@ name is not a symbolic ref, or 128 if another error occurs.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2013-08-20 08:40:27 PDT
+ 2013-08-21 00:40:27 JST
</div>
</div>
</body>
diff --git a/git-tag.html b/git-tag.html index 61c853b66..33d5f88ac 100644 --- a/git-tag.html +++ b/git-tag.html @@ -1339,7 +1339,7 @@ commits and from none of the <code>--no-merged</code> commits are shown.</p></di <div id="footer">
<div id="footer-text">
Last updated
- 2021-02-25 17:29:29 PST
+ 2021-02-26 10:29:29 JST
</div>
</div>
</body>
diff --git a/git-unpack-file.html b/git-unpack-file.html index 44bf6db51..ef61ee594 100644 --- a/git-unpack-file.html +++ b/git-unpack-file.html @@ -788,7 +788,7 @@ returns the name of the temporary file in the following format: <div id="footer">
<div id="footer-text">
Last updated
- 2013-08-20 08:40:27 PDT
+ 2013-08-21 00:40:27 JST
</div>
</div>
</body>
diff --git a/git-unpack-objects.html b/git-unpack-objects.html index e623a7a62..b49625d10 100644 --- a/git-unpack-objects.html +++ b/git-unpack-objects.html @@ -830,7 +830,7 @@ new packs and replace existing ones.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2016-09-12 17:53:34 PDT
+ 2016-09-13 09:53:34 JST
</div>
</div>
</body>
diff --git a/git-update-index.html b/git-update-index.html index 7f44b70fe..ef127e902 100644 --- a/git-update-index.html +++ b/git-update-index.html @@ -1518,7 +1518,7 @@ automatically.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2021-01-25 15:29:19 PST
+ 2021-01-26 08:29:19 JST
</div>
</div>
</body>
diff --git a/git-update-ref.html b/git-update-ref.html index db27f94d5..22bef6167 100644 --- a/git-update-ref.html +++ b/git-update-ref.html @@ -974,7 +974,7 @@ or does not have committer information available.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2020-12-08 16:10:07 PST
+ 2020-12-09 09:10:07 JST
</div>
</div>
</body>
diff --git a/git-update-server-info.html b/git-update-server-info.html index b985798e5..99ffe8b4c 100644 --- a/git-update-server-info.html +++ b/git-update-server-info.html @@ -795,7 +795,7 @@ info/refs <div id="footer">
<div id="footer-text">
Last updated
- 2020-03-10 08:03:13 PDT
+ 2020-03-11 00:03:13 JST
</div>
</div>
</body>
diff --git a/git-upload-archive.html b/git-upload-archive.html index f3e825c04..b077afe05 100644 --- a/git-upload-archive.html +++ b/git-upload-archive.html @@ -832,7 +832,7 @@ access via non-smart-http.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2015-10-29 14:44:28 PDT
+ 2015-10-30 06:44:28 JST
</div>
</div>
</body>
diff --git a/git-upload-pack.html b/git-upload-pack.html index bceb323dc..ba242df15 100644 --- a/git-upload-pack.html +++ b/git-upload-pack.html @@ -834,7 +834,7 @@ repository. For push operations, see <em>git send-pack</em>.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2020-03-10 08:03:13 PDT
+ 2020-03-11 00:03:13 JST
</div>
</div>
</body>
diff --git a/git-var.html b/git-var.html index b903ada8b..7bd3e3c58 100644 --- a/git-var.html +++ b/git-var.html @@ -856,7 +856,7 @@ GIT_PAGER <div id="footer">
<div id="footer-text">
Last updated
- 2020-03-10 08:03:13 PDT
+ 2020-03-11 00:03:13 JST
</div>
</div>
</body>
diff --git a/git-verify-commit.html b/git-verify-commit.html index cdc047bbb..2709ee569 100644 --- a/git-verify-commit.html +++ b/git-verify-commit.html @@ -806,7 +806,7 @@ git-verify-commit(1) Manual Page <div id="footer">
<div id="footer-text">
Last updated
- 2016-06-27 11:04:05 PDT
+ 2016-06-28 03:04:05 JST
</div>
</div>
</body>
diff --git a/git-verify-pack.html b/git-verify-pack.html index 2562ee172..ff2bb5f1e 100644 --- a/git-verify-pack.html +++ b/git-verify-pack.html @@ -836,7 +836,7 @@ corresponding pack file.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2015-05-22 13:47:07 PDT
+ 2015-05-23 05:47:07 JST
</div>
</div>
</body>
diff --git a/git-verify-tag.html b/git-verify-tag.html index 75e9ee1a2..a23a783a3 100644 --- a/git-verify-tag.html +++ b/git-verify-tag.html @@ -806,7 +806,7 @@ git-verify-tag(1) Manual Page <div id="footer">
<div id="footer-text">
Last updated
- 2017-01-31 14:00:53 PST
+ 2017-02-01 07:00:53 JST
</div>
</div>
</body>
diff --git a/git-web--browse.html b/git-web--browse.html index 4faabd14f..c088f7bef 100644 --- a/git-web--browse.html +++ b/git-web--browse.html @@ -964,7 +964,7 @@ See <a href="git-config.html">git-config(1)</a> for more information about this. <div id="footer">
<div id="footer-text">
Last updated
- 2020-03-10 08:03:13 PDT
+ 2020-03-11 00:03:13 JST
</div>
</div>
</body>
diff --git a/git-whatchanged.html b/git-whatchanged.html index 99e6e5d0f..28f879af9 100644 --- a/git-whatchanged.html +++ b/git-whatchanged.html @@ -803,7 +803,7 @@ reading Linux kernel mailing list are trained to type it.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2013-08-30 16:51:59 PDT
+ 2013-08-31 08:51:59 JST
</div>
</div>
</body>
diff --git a/git-worktree.html b/git-worktree.html index bdd1df1c6..4b550a2f5 100644 --- a/git-worktree.html +++ b/git-worktree.html @@ -1360,7 +1360,7 @@ checkouts of a superproject.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2021-02-10 15:27:55 PST
+ 2021-02-11 08:27:55 JST
</div>
</div>
</body>
diff --git a/git-write-tree.html b/git-write-tree.html index cd6b1a463..e5f6e5333 100644 --- a/git-write-tree.html +++ b/git-write-tree.html @@ -805,7 +805,7 @@ now, you need to have done a <em>git update-index</em> phase before you did the <div id="footer">
<div id="footer-text">
Last updated
- 2013-08-20 08:40:27 PDT
+ 2013-08-21 00:40:27 JST
</div>
</div>
</body>
@@ -3613,7 +3613,7 @@ the Git Security mailing list <<a href="mailto:git-security@googlegroups.com" <div id="footer">
<div id="footer-text">
Last updated
- 2021-02-25 17:29:29 PST
+ 2021-02-26 10:29:29 JST
</div>
</div>
</body>
diff --git a/gitattributes.html b/gitattributes.html index 249f12391..f1c49227e 100644 --- a/gitattributes.html +++ b/gitattributes.html @@ -1677,6 +1677,11 @@ patterns are available:</p></div> </li>
<li>
<p>
+<code>scheme</code> suitable for source code in the Scheme language.
+</p>
+</li>
+<li>
+<p>
<code>tex</code> suitable for source code for LaTeX documents.
</p>
</li>
@@ -2182,7 +2187,7 @@ frotz unspecified</code></pre> <div id="footer">
<div id="footer-text">
Last updated
- 2021-03-22 14:17:33 PDT
+ 2021-04-30 15:03:30 JST
</div>
</div>
</body>
diff --git a/gitattributes.txt b/gitattributes.txt index 0a60472bb..cfcfa800c 100644 --- a/gitattributes.txt +++ b/gitattributes.txt @@ -845,6 +845,8 @@ patterns are available: - `rust` suitable for source code in the Rust language. +- `scheme` suitable for source code in the Scheme language. + - `tex` suitable for source code for LaTeX documents. diff --git a/gitcli.html b/gitcli.html index 65322cba3..a4538ad7b 100644 --- a/gitcli.html +++ b/gitcli.html @@ -1040,7 +1040,7 @@ The two options can be specified together to ask a command to work <div id="footer">
<div id="footer-text">
Last updated
- 2020-03-11 14:26:57 PDT
+ 2020-03-12 06:26:57 JST
</div>
</div>
</body>
diff --git a/gitcore-tutorial.html b/gitcore-tutorial.html index ff3309c52..2b7c71829 100644 --- a/gitcore-tutorial.html +++ b/gitcore-tutorial.html @@ -2458,7 +2458,7 @@ to follow, not easier.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2020-03-10 08:03:13 PDT
+ 2020-03-11 00:03:13 JST
</div>
</div>
</body>
diff --git a/gitcredentials.html b/gitcredentials.html index 0a227f69e..c3d2279ec 100644 --- a/gitcredentials.html +++ b/gitcredentials.html @@ -1106,7 +1106,7 @@ helpers will just ignore the new requests).</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2020-08-10 16:30:08 PDT
+ 2020-08-11 08:30:08 JST
</div>
</div>
</body>
diff --git a/gitcvs-migration.html b/gitcvs-migration.html index 796768078..d7031646f 100644 --- a/gitcvs-migration.html +++ b/gitcvs-migration.html @@ -957,7 +957,7 @@ repositories without the need for a central maintainer.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2017-02-15 15:17:51 PST
+ 2017-02-16 08:17:51 JST
</div>
</div>
</body>
diff --git a/gitdiffcore.html b/gitdiffcore.html index 0f83ea59e..0101065f1 100644 --- a/gitdiffcore.html +++ b/gitdiffcore.html @@ -1108,7 +1108,7 @@ not sorted when diffcore-order is in effect.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2021-03-22 14:17:33 PDT
+ 2021-03-23 06:17:33 JST
</div>
</div>
</body>
diff --git a/giteveryday.html b/giteveryday.html index bb922d78d..ae076e461 100644 --- a/giteveryday.html +++ b/giteveryday.html @@ -1546,7 +1546,7 @@ create and push version tags. <div id="footer">
<div id="footer-text">
Last updated
- 2020-07-06 22:33:22 PDT
+ 2020-07-07 14:33:22 JST
</div>
</div>
</body>
diff --git a/gitfaq.html b/gitfaq.html index 90af7073a..3f9ef4f83 100644 --- a/gitfaq.html +++ b/gitfaq.html @@ -1262,7 +1262,7 @@ platform.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2020-09-29 14:47:55 PDT
+ 2020-09-30 06:47:55 JST
</div>
</div>
</body>
diff --git a/gitglossary.html b/gitglossary.html index 52bb5d5b8..a48674506 100644 --- a/gitglossary.html +++ b/gitglossary.html @@ -1921,7 +1921,7 @@ The most notable example is <code>HEAD</code>.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2017-02-15 15:17:51 PST
+ 2017-02-16 08:17:51 JST
</div>
</div>
</body>
diff --git a/githooks.html b/githooks.html index 4d422deb5..38cfaa93d 100644 --- a/githooks.html +++ b/githooks.html @@ -1377,7 +1377,7 @@ running passing "1", "1" should not be possible.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2021-03-22 14:17:33 PDT
+ 2021-03-23 06:17:33 JST
</div>
</div>
</body>
diff --git a/gitignore.html b/gitignore.html index 876bf28c1..850cb9953 100644 --- a/gitignore.html +++ b/gitignore.html @@ -1069,7 +1069,7 @@ everything within <code>foo/bar</code>):</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2021-03-22 14:17:33 PDT
+ 2021-03-23 06:17:33 JST
</div>
</div>
</body>
@@ -1101,7 +1101,7 @@ of end users.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2020-11-18 14:12:24 PST
+ 2020-11-19 07:12:24 JST
</div>
</div>
</body>
diff --git a/gitmailmap.html b/gitmailmap.html index 35f1707a1..7e1a4904e 100644 --- a/gitmailmap.html +++ b/gitmailmap.html @@ -884,7 +884,7 @@ Jane Doe <jane@example.com> Jane <bugs@example.com></code></pre> <div id="footer">
<div id="footer-text">
Last updated
- 2021-02-25 17:29:29 PST
+ 2021-02-26 10:29:29 JST
</div>
</div>
</body>
diff --git a/gitmodules.html b/gitmodules.html index 625bc0de7..2e5d2c8f7 100644 --- a/gitmodules.html +++ b/gitmodules.html @@ -938,7 +938,7 @@ submodules a URL is specified which can be used for cloning the submodules.</p>< <div id="footer">
<div id="footer-text">
Last updated
- 2021-01-15 16:12:09 PST
+ 2021-01-16 09:12:09 JST
</div>
</div>
</body>
diff --git a/gitnamespaces.html b/gitnamespaces.html index 794c2e3c2..a1f9bffb6 100644 --- a/gitnamespaces.html +++ b/gitnamespaces.html @@ -844,7 +844,7 @@ As in #1, the attacker chooses an object ID X to steal. The victim sends <div id="footer">
<div id="footer-text">
Last updated
- 2017-01-10 15:42:58 PST
+ 2017-01-11 08:42:58 JST
</div>
</div>
</body>
diff --git a/gitremote-helpers.html b/gitremote-helpers.html index e7880596f..f505c4544 100644 --- a/gitremote-helpers.html +++ b/gitremote-helpers.html @@ -1518,7 +1518,7 @@ the remote side using that algorithm.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2020-07-06 22:33:22 PDT
+ 2020-07-07 14:33:22 JST
</div>
</div>
</body>
diff --git a/gitrepository-layout.html b/gitrepository-layout.html index 53e05226f..b3bfa9a83 100644 --- a/gitrepository-layout.html +++ b/gitrepository-layout.html @@ -1372,7 +1372,7 @@ GIT_COMMON_DIR/worktrees/<id>/config.worktree)</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2020-03-10 08:03:13 PDT
+ 2020-03-11 00:03:13 JST
</div>
</div>
</body>
diff --git a/gitrevisions.html b/gitrevisions.html index 23a1a49f6..f0cf52175 100644 --- a/gitrevisions.html +++ b/gitrevisions.html @@ -1324,7 +1324,7 @@ spelt out:</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2020-03-10 08:03:13 PDT
+ 2020-03-11 00:03:13 JST
</div>
</div>
</body>
diff --git a/gitsubmodules.html b/gitsubmodules.html index 70dd427ea..23e98dc4e 100644 --- a/gitsubmodules.html +++ b/gitsubmodules.html @@ -1113,7 +1113,7 @@ affects other Git commands, see <a href="git-config.html">git-config(1)</a> for <div id="footer">
<div id="footer-text">
Last updated
- 2020-10-05 15:17:53 PDT
+ 2020-10-06 07:17:53 JST
</div>
</div>
</body>
diff --git a/gittutorial-2.html b/gittutorial-2.html index adb66df17..b050d3722 100644 --- a/gittutorial-2.html +++ b/gittutorial-2.html @@ -1171,7 +1171,7 @@ example, creating a new commit.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2020-03-10 08:03:13 PDT
+ 2020-03-11 00:03:13 JST
</div>
</div>
</body>
diff --git a/gittutorial.html b/gittutorial.html index 1914190c9..91cf0bcc5 100644 --- a/gittutorial.html +++ b/gittutorial.html @@ -1375,7 +1375,7 @@ digressions that may be interesting at this point are:</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2020-03-10 08:03:13 PDT
+ 2020-03-11 00:03:13 JST
</div>
</div>
</body>
diff --git a/gitweb.conf.html b/gitweb.conf.html index bdf9d94e8..90cc8ee8b 100644 --- a/gitweb.conf.html +++ b/gitweb.conf.html @@ -2015,7 +2015,7 @@ gitweb_config.perl <div id="footer">
<div id="footer-text">
Last updated
- 2021-04-13 17:34:18 PDT
+ 2021-04-14 09:34:18 JST
</div>
</div>
</body>
diff --git a/gitweb.html b/gitweb.html index 9fa10d103..ff428c375 100644 --- a/gitweb.html +++ b/gitweb.html @@ -1642,7 +1642,7 @@ putting "gitweb" in the subject of email.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2020-03-10 08:03:13 PDT
+ 2020-03-11 00:03:13 JST
</div>
</div>
</body>
diff --git a/gitworkflows.html b/gitworkflows.html index f188ee447..9e711aad6 100644 --- a/gitworkflows.html +++ b/gitworkflows.html @@ -1225,7 +1225,7 @@ other options.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2020-07-18 17:57:39 PDT
+ 2020-07-19 09:57:39 JST
</div>
</div>
</body>
diff --git a/howto/coordinate-embargoed-releases.html b/howto/coordinate-embargoed-releases.html index 8068c7d3a..7e9b9d7d3 100644 --- a/howto/coordinate-embargoed-releases.html +++ b/howto/coordinate-embargoed-releases.html @@ -873,7 +873,7 @@ Thanks, <div id="footer">
<div id="footer-text">
Last updated
- 2021-04-16 15:13:14 PDT
+ 2021-04-30 15:04:59 JST
</div>
</div>
</body>
diff --git a/howto/keep-canonical-history-correct.html b/howto/keep-canonical-history-correct.html index 422f66526..7435aa8e4 100644 --- a/howto/keep-canonical-history-correct.html +++ b/howto/keep-canonical-history-correct.html @@ -938,7 +938,7 @@ tip of your <em>master</em> again and redo the two merges:</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2021-04-16 15:13:13 PDT
+ 2021-04-30 15:04:59 JST
</div>
</div>
</body>
diff --git a/howto/maintain-git.html b/howto/maintain-git.html index 14c705e17..837034095 100644 --- a/howto/maintain-git.html +++ b/howto/maintain-git.html @@ -1469,7 +1469,7 @@ $ git update-ref -d $mf/ai/topic</code></pre> <div id="footer">
<div id="footer-text">
Last updated
- 2021-04-16 15:13:14 PDT
+ 2021-04-30 15:04:59 JST
</div>
</div>
</body>
diff --git a/howto/new-command.html b/howto/new-command.html index 995c07db3..74093a43d 100644 --- a/howto/new-command.html +++ b/howto/new-command.html @@ -863,7 +863,7 @@ letter [PATCH 0/n]. <div id="footer">
<div id="footer-text">
Last updated
- 2021-04-16 15:13:09 PDT
+ 2021-04-30 15:04:53 JST
</div>
</div>
</body>
diff --git a/howto/rebase-from-internal-branch.html b/howto/rebase-from-internal-branch.html index 8cd7e6898..562154783 100644 --- a/howto/rebase-from-internal-branch.html +++ b/howto/rebase-from-internal-branch.html @@ -895,7 +895,7 @@ the #1' commit.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2021-04-16 15:13:13 PDT
+ 2021-04-30 15:04:59 JST
</div>
</div>
</body>
diff --git a/howto/rebuild-from-update-hook.html b/howto/rebuild-from-update-hook.html index 0e42c7749..470bef080 100644 --- a/howto/rebuild-from-update-hook.html +++ b/howto/rebuild-from-update-hook.html @@ -847,7 +847,7 @@ This is still crude and does not protect against simultaneous <div id="footer">
<div id="footer-text">
Last updated
- 2021-04-16 15:13:13 PDT
+ 2021-04-30 15:04:58 JST
</div>
</div>
</body>
diff --git a/howto/recover-corrupted-blob-object.html b/howto/recover-corrupted-blob-object.html index ce339e0c6..c83e5be4c 100644 --- a/howto/recover-corrupted-blob-object.html +++ b/howto/recover-corrupted-blob-object.html @@ -880,7 +880,7 @@ thing.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2021-04-16 15:13:12 PDT
+ 2021-04-30 15:04:57 JST
</div>
</div>
</body>
diff --git a/howto/recover-corrupted-object-harder.html b/howto/recover-corrupted-object-harder.html index df6ebcac2..372365d23 100644 --- a/howto/recover-corrupted-object-harder.html +++ b/howto/recover-corrupted-object-harder.html @@ -1189,7 +1189,7 @@ int main(int argc, char **argv) <div id="footer">
<div id="footer-text">
Last updated
- 2021-04-16 15:13:13 PDT
+ 2021-04-30 15:04:58 JST
</div>
</div>
</body>
diff --git a/howto/revert-a-faulty-merge.html b/howto/revert-a-faulty-merge.html index 55cfa5a51..84b673aeb 100644 --- a/howto/revert-a-faulty-merge.html +++ b/howto/revert-a-faulty-merge.html @@ -1025,7 +1025,7 @@ P---o---o---M---x---x---W---x---M2 <div id="footer">
<div id="footer-text">
Last updated
- 2021-04-16 15:13:12 PDT
+ 2021-04-30 15:04:57 JST
</div>
</div>
</body>
diff --git a/howto/revert-branch-rebase.html b/howto/revert-branch-rebase.html index 830326305..54150bf63 100644 --- a/howto/revert-branch-rebase.html +++ b/howto/revert-branch-rebase.html @@ -907,7 +907,7 @@ Committed merge 7fb9b7262a1d1e0a47bbfdcbbcf50ce0635d3f8f <div id="footer">
<div id="footer-text">
Last updated
- 2021-04-16 15:13:09 PDT
+ 2021-04-30 15:04:53 JST
</div>
</div>
</body>
diff --git a/howto/separating-topic-branches.html b/howto/separating-topic-branches.html index 23fd4f3a3..aad0aefda 100644 --- a/howto/separating-topic-branches.html +++ b/howto/separating-topic-branches.html @@ -841,7 +841,7 @@ o---o"master"</code></pre> <div id="footer">
<div id="footer-text">
Last updated
- 2021-04-16 15:13:11 PDT
+ 2021-04-30 15:04:56 JST
</div>
</div>
</body>
diff --git a/howto/setup-git-server-over-http.html b/howto/setup-git-server-over-http.html index 1a99cb616..90a3de167 100644 --- a/howto/setup-git-server-over-http.html +++ b/howto/setup-git-server-over-http.html @@ -1071,7 +1071,7 @@ help diagnosing the problem, but removes security checks.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2021-04-16 15:13:11 PDT
+ 2021-04-30 15:04:56 JST
</div>
</div>
</body>
diff --git a/howto/update-hook-example.html b/howto/update-hook-example.html index c342ca34a..7e53563d1 100644 --- a/howto/update-hook-example.html +++ b/howto/update-hook-example.html @@ -930,7 +930,7 @@ that JC can make non-fast-forward pushes on it.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2021-04-16 15:13:10 PDT
+ 2021-04-30 15:04:55 JST
</div>
</div>
</body>
diff --git a/howto/use-git-daemon.html b/howto/use-git-daemon.html index c5442b60b..8d66c935a 100644 --- a/howto/use-git-daemon.html +++ b/howto/use-git-daemon.html @@ -791,7 +791,7 @@ a good practice to put the paths after a "--" separator.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2021-04-16 15:13:10 PDT
+ 2021-04-30 15:04:55 JST
</div>
</div>
</body>
diff --git a/howto/using-merge-subtree.html b/howto/using-merge-subtree.html index ca1f2de28..12896dd2c 100644 --- a/howto/using-merge-subtree.html +++ b/howto/using-merge-subtree.html @@ -848,7 +848,7 @@ Please note that if the other project merges from you, then it will <div id="footer">
<div id="footer-text">
Last updated
- 2021-04-16 15:13:09 PDT
+ 2021-04-30 15:04:54 JST
</div>
</div>
</body>
diff --git a/howto/using-signed-tag-in-pull-request.html b/howto/using-signed-tag-in-pull-request.html index fae3f9e40..832af2091 100644 --- a/howto/using-signed-tag-in-pull-request.html +++ b/howto/using-signed-tag-in-pull-request.html @@ -952,7 +952,7 @@ as part of the merge commit.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2021-04-16 15:13:10 PDT
+ 2021-04-30 15:04:54 JST
</div>
</div>
</body>
diff --git a/technical/api-error-handling.html b/technical/api-error-handling.html index b3058e0ae..ec6b33978 100644 --- a/technical/api-error-handling.html +++ b/technical/api-error-handling.html @@ -739,11 +739,17 @@ asciidoc.install(); <div id="content">
<div id="preamble">
<div class="sectionbody">
-<div class="paragraph"><p><code>die</code>, <code>usage</code>, <code>error</code>, and <code>warning</code> report errors of various
-kinds.</p></div>
+<div class="paragraph"><p><code>BUG</code>, <code>die</code>, <code>usage</code>, <code>error</code>, and <code>warning</code> report errors of
+various kinds.</p></div>
<div class="ulist"><ul>
<li>
<p>
+<code>BUG</code> is for failed internal assertions that should never happen,
+ i.e. a bug in git itself.
+</p>
+</li>
+<li>
+<p>
<code>die</code> is for fatal application errors. It prints a message to
the user and exits with status 128.
</p>
@@ -771,6 +777,8 @@ kinds.</p></div> </p>
</li>
</ul></div>
+<div class="paragraph"><p>These reports will be logged via the trace2 facility. See the "error"
+event in <a href="api-trace2.txt">trace2 API</a>.</p></div>
</div>
</div>
<div class="sect1">
@@ -849,7 +857,7 @@ a message, pass a strbuf that is explicitly ignored:</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2015-03-28 11:17:28 PDT
+ 2021-04-30 15:03:30 JST
</div>
</div>
</body>
diff --git a/technical/api-error-handling.txt b/technical/api-error-handling.txt index ceeedd485..8be4f4d0d 100644 --- a/technical/api-error-handling.txt +++ b/technical/api-error-handling.txt @@ -1,8 +1,11 @@ Error reporting in git ====================== -`die`, `usage`, `error`, and `warning` report errors of various -kinds. +`BUG`, `die`, `usage`, `error`, and `warning` report errors of +various kinds. + +- `BUG` is for failed internal assertions that should never happen, + i.e. a bug in git itself. - `die` is for fatal application errors. It prints a message to the user and exits with status 128. @@ -20,6 +23,9 @@ kinds. without running into too many problems. Like `error`, it returns -1 after reporting the situation to the caller. +These reports will be logged via the trace2 facility. See the "error" +event in link:api-trace2.txt[trace2 API]. + Customizable error handlers --------------------------- diff --git a/technical/api-index.html b/technical/api-index.html index d820c3a20..72f03a4fd 100644 --- a/technical/api-index.html +++ b/technical/api-index.html @@ -775,7 +775,7 @@ documents them.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2021-04-02 15:10:16 PDT
+ 2021-04-03 07:10:16 JST
</div>
</div>
</body>
diff --git a/technical/api-merge.html b/technical/api-merge.html index b2ddb05bd..d6f544e8d 100644 --- a/technical/api-merge.html +++ b/technical/api-merge.html @@ -801,7 +801,7 @@ and <code>diff.c</code> for examples.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2020-03-10 08:03:13 PDT
+ 2020-03-11 00:03:13 JST
</div>
</div>
</body>
diff --git a/technical/api-parse-options.html b/technical/api-parse-options.html index f22b69fc1..71e44b7f8 100644 --- a/technical/api-parse-options.html +++ b/technical/api-parse-options.html @@ -1290,7 +1290,7 @@ for real-world examples.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2020-08-10 16:30:08 PDT
+ 2020-08-11 08:30:08 JST
</div>
</div>
</body>
diff --git a/technical/api-simple-ipc.html b/technical/api-simple-ipc.html index d99956601..d1c9426eb 100644 --- a/technical/api-simple-ipc.html +++ b/technical/api-simple-ipc.html @@ -840,7 +840,7 @@ layer to focus on the application at hand.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2021-04-02 15:10:10 PDT
+ 2021-04-03 07:10:10 JST
</div>
</div>
</body>
diff --git a/technical/api-trace2.html b/technical/api-trace2.html index f0be56a18..5044b0c54 100644 --- a/technical/api-trace2.html +++ b/technical/api-trace2.html @@ -1337,7 +1337,7 @@ completed.)</p></div> </dt>
<dd>
<p>
- This event is emitted when one of the <code>error()</code>, <code>die()</code>,
+ This event is emitted when one of the <code>BUG()</code>, <code>error()</code>, <code>die()</code>,
<code>warning()</code>, or <code>usage()</code> functions are called.
</p>
<div class="listingblock">
@@ -2156,7 +2156,7 @@ Trace2 targets (and convert <key> to a "category"). <div id="footer">
<div id="footer-text">
Last updated
- 2020-12-08 16:10:07 PST
+ 2021-04-30 15:03:30 JST
</div>
</div>
</body>
diff --git a/technical/api-trace2.txt b/technical/api-trace2.txt index c65ffafc4..3f52f981a 100644 --- a/technical/api-trace2.txt +++ b/technical/api-trace2.txt @@ -465,7 +465,7 @@ completed.) ------------ `"error"`:: - This event is emitted when one of the `error()`, `die()`, + This event is emitted when one of the `BUG()`, `error()`, `die()`, `warning()`, or `usage()` functions are called. + ------------ diff --git a/technical/hash-function-transition.html b/technical/hash-function-transition.html index 0c3904b18..2513d0874 100644 --- a/technical/hash-function-transition.html +++ b/technical/hash-function-transition.html @@ -2087,7 +2087,7 @@ See the history of this file in git.git for the history of subsequent <div id="footer">
<div id="footer-text">
Last updated
- 2021-02-22 16:54:23 PST
+ 2021-02-23 09:54:23 JST
</div>
</div>
</body>
diff --git a/technical/http-protocol.html b/technical/http-protocol.html index d3b848ce4..39d6e2d51 100644 --- a/technical/http-protocol.html +++ b/technical/http-protocol.html @@ -1248,7 +1248,7 @@ link:technical/protocol-capabilities.html</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2020-08-19 16:37:10 PDT
+ 2020-08-20 08:37:10 JST
</div>
</div>
</body>
diff --git a/technical/index-format.html b/technical/index-format.html index b5eab20e8..cc6c9db7e 100644 --- a/technical/index-format.html +++ b/technical/index-format.html @@ -820,6 +820,15 @@ with the same name are sorted by their stage field.</code></pre> </div></div>
<div class="literalblock">
<div class="content">
+<pre><code>An index entry typically represents a file. However, if sparse-checkout
+is enabled in cone mode (`core.sparseCheckoutCone` is enabled) and the
+`extensions.sparseIndex` extension is enabled, then the index may
+contain entries for directories outside of the sparse-checkout definition.
+These entries have mode `040000`, include the `SKIP_WORKTREE` bit, and
+the path ends in a directory separator.</code></pre>
+</div></div>
+<div class="literalblock">
+<div class="content">
<pre><code>32-bit ctime seconds, the last time a file's metadata changed
this is stat(2) data</code></pre>
</div></div>
@@ -1433,12 +1442,29 @@ A number of index offset entries each consisting of: </ul></div>
</div>
</div>
+<div class="sect1">
+<h2 id="_sparse_directory_entries">Sparse Directory Entries</h2>
+<div class="sectionbody">
+<div class="literalblock">
+<div class="content">
+<pre><code>When using sparse-checkout in cone mode, some entire directories within
+the index can be summarized by pointing to a tree object instead of the
+entire expanded list of paths within that tree. An index containing such
+entries is a "sparse index". Index format versions 4 and less were not
+implemented with such entries in mind. Thus, for these versions, an
+index containing sparse directory entries will include this extension
+with signature { 's', 'd', 'i', 'r' }. Like the split-index extension,
+tools should avoid interacting with a sparse index unless they understand
+this extension.</code></pre>
+</div></div>
+</div>
+</div>
</div>
<div id="footnotes"><hr /></div>
<div id="footer">
<div id="footer-text">
Last updated
- 2021-02-25 17:29:29 PST
+ 2021-04-30 15:03:30 JST
</div>
</div>
</body>
diff --git a/technical/index-format.txt b/technical/index-format.txt index d363a71c3..65da0daaa 100644 --- a/technical/index-format.txt +++ b/technical/index-format.txt @@ -44,6 +44,13 @@ Git index format localization, no special casing of directory separator '/'). Entries with the same name are sorted by their stage field. + An index entry typically represents a file. However, if sparse-checkout + is enabled in cone mode (`core.sparseCheckoutCone` is enabled) and the + `extensions.sparseIndex` extension is enabled, then the index may + contain entries for directories outside of the sparse-checkout definition. + These entries have mode `040000`, include the `SKIP_WORKTREE` bit, and + the path ends in a directory separator. + 32-bit ctime seconds, the last time a file's metadata changed this is stat(2) data @@ -385,3 +392,15 @@ The remaining data of each directory block is grouped by type: in this block of entries. - 32-bit count of cache entries in this block + +== Sparse Directory Entries + + When using sparse-checkout in cone mode, some entire directories within + the index can be summarized by pointing to a tree object instead of the + entire expanded list of paths within that tree. An index containing such + entries is a "sparse index". Index format versions 4 and less were not + implemented with such entries in mind. Thus, for these versions, an + index containing sparse directory entries will include this extension + with signature { 's', 'd', 'i', 'r' }. Like the split-index extension, + tools should avoid interacting with a sparse index unless they understand + this extension. diff --git a/technical/long-running-process-protocol.html b/technical/long-running-process-protocol.html index 730362be7..79d2b02ea 100644 --- a/technical/long-running-process-protocol.html +++ b/technical/long-running-process-protocol.html @@ -795,7 +795,7 @@ process has stopped.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2020-03-10 08:03:13 PDT
+ 2020-03-11 00:03:13 JST
</div>
</div>
</body>
diff --git a/technical/multi-pack-index.html b/technical/multi-pack-index.html index 4c337fbfd..e0220db5d 100644 --- a/technical/multi-pack-index.html +++ b/technical/multi-pack-index.html @@ -913,7 +913,7 @@ The partial clone feature records special "promisor" packs that <div id="footer">
<div id="footer-text">
Last updated
- 2021-04-08 14:45:29 PDT
+ 2021-04-09 06:45:29 JST
</div>
</div>
</body>
diff --git a/technical/pack-format.html b/technical/pack-format.html index b3002425b..c0f964a67 100644 --- a/technical/pack-format.html +++ b/technical/pack-format.html @@ -1372,7 +1372,7 @@ filename (e.g., <code>multi-pack-index-xyz.rev</code>).</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2021-04-08 14:45:29 PDT
+ 2021-04-09 06:45:29 JST
</div>
</div>
</body>
diff --git a/technical/pack-heuristics.html b/technical/pack-heuristics.html index 3e6da3f62..bd50aeebc 100644 --- a/technical/pack-heuristics.html +++ b/technical/pack-heuristics.html @@ -1343,7 +1343,7 @@ so obvious that they never go anywhere.</code></pre> <div id="footer">
<div id="footer-text">
Last updated
- 2014-01-13 15:35:15 PST
+ 2014-01-14 08:35:15 JST
</div>
</div>
</body>
diff --git a/technical/pack-protocol.html b/technical/pack-protocol.html index ff3743398..4cb047dfc 100644 --- a/technical/pack-protocol.html +++ b/technical/pack-protocol.html @@ -1470,7 +1470,7 @@ can be rejected.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2020-09-25 15:47:14 PDT
+ 2020-09-26 07:47:14 JST
</div>
</div>
</body>
diff --git a/technical/parallel-checkout.html b/technical/parallel-checkout.html new file mode 100644 index 000000000..c575bb4e0 --- /dev/null +++ b/technical/parallel-checkout.html @@ -0,0 +1,1082 @@ +<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
+ "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+<head>
+<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
+<meta name="generator" content="AsciiDoc 9.0.0rc2" />
+<title>Parallel Checkout Design Notes</title>
+<style type="text/css">
+/* Shared CSS for AsciiDoc xhtml11 and html5 backends */
+
+/* Default font. */
+body {
+ font-family: Georgia,serif;
+}
+
+/* Title font. */
+h1, h2, h3, h4, h5, h6,
+div.title, caption.title,
+thead, p.table.header,
+#toctitle,
+#author, #revnumber, #revdate, #revremark,
+#footer {
+ font-family: Arial,Helvetica,sans-serif;
+}
+
+body {
+ margin: 1em 5% 1em 5%;
+}
+
+a {
+ color: blue;
+ text-decoration: underline;
+}
+a:visited {
+ color: fuchsia;
+}
+
+em {
+ font-style: italic;
+ color: navy;
+}
+
+strong {
+ font-weight: bold;
+ color: #083194;
+}
+
+h1, h2, h3, h4, h5, h6 {
+ color: #527bbd;
+ margin-top: 1.2em;
+ margin-bottom: 0.5em;
+ line-height: 1.3;
+}
+
+h1, h2, h3 {
+ border-bottom: 2px solid silver;
+}
+h2 {
+ padding-top: 0.5em;
+}
+h3 {
+ float: left;
+}
+h3 + * {
+ clear: left;
+}
+h5 {
+ font-size: 1.0em;
+}
+
+div.sectionbody {
+ margin-left: 0;
+}
+
+hr {
+ border: 1px solid silver;
+}
+
+p {
+ margin-top: 0.5em;
+ margin-bottom: 0.5em;
+}
+
+ul, ol, li > p {
+ margin-top: 0;
+}
+ul > li { color: #aaa; }
+ul > li > * { color: black; }
+
+.monospaced, code, pre {
+ font-family: "Courier New", Courier, monospace;
+ font-size: inherit;
+ color: navy;
+ padding: 0;
+ margin: 0;
+}
+pre {
+ white-space: pre-wrap;
+}
+
+#author {
+ color: #527bbd;
+ font-weight: bold;
+ font-size: 1.1em;
+}
+#email {
+}
+#revnumber, #revdate, #revremark {
+}
+
+#footer {
+ font-size: small;
+ border-top: 2px solid silver;
+ padding-top: 0.5em;
+ margin-top: 4.0em;
+}
+#footer-text {
+ float: left;
+ padding-bottom: 0.5em;
+}
+#footer-badges {
+ float: right;
+ padding-bottom: 0.5em;
+}
+
+#preamble {
+ margin-top: 1.5em;
+ margin-bottom: 1.5em;
+}
+div.imageblock, div.exampleblock, div.verseblock,
+div.quoteblock, div.literalblock, div.listingblock, div.sidebarblock,
+div.admonitionblock {
+ margin-top: 1.0em;
+ margin-bottom: 1.5em;
+}
+div.admonitionblock {
+ margin-top: 2.0em;
+ margin-bottom: 2.0em;
+ margin-right: 10%;
+ color: #606060;
+}
+
+div.content { /* Block element content. */
+ padding: 0;
+}
+
+/* Block element titles. */
+div.title, caption.title {
+ color: #527bbd;
+ font-weight: bold;
+ text-align: left;
+ margin-top: 1.0em;
+ margin-bottom: 0.5em;
+}
+div.title + * {
+ margin-top: 0;
+}
+
+td div.title:first-child {
+ margin-top: 0.0em;
+}
+div.content div.title:first-child {
+ margin-top: 0.0em;
+}
+div.content + div.title {
+ margin-top: 0.0em;
+}
+
+div.sidebarblock > div.content {
+ background: #ffffee;
+ border: 1px solid #dddddd;
+ border-left: 4px solid #f0f0f0;
+ padding: 0.5em;
+}
+
+div.listingblock > div.content {
+ border: 1px solid #dddddd;
+ border-left: 5px solid #f0f0f0;
+ background: #f8f8f8;
+ padding: 0.5em;
+}
+
+div.quoteblock, div.verseblock {
+ padding-left: 1.0em;
+ margin-left: 1.0em;
+ margin-right: 10%;
+ border-left: 5px solid #f0f0f0;
+ color: #888;
+}
+
+div.quoteblock > div.attribution {
+ padding-top: 0.5em;
+ text-align: right;
+}
+
+div.verseblock > pre.content {
+ font-family: inherit;
+ font-size: inherit;
+}
+div.verseblock > div.attribution {
+ padding-top: 0.75em;
+ text-align: left;
+}
+/* DEPRECATED: Pre version 8.2.7 verse style literal block. */
+div.verseblock + div.attribution {
+ text-align: left;
+}
+
+div.admonitionblock .icon {
+ vertical-align: top;
+ font-size: 1.1em;
+ font-weight: bold;
+ text-decoration: underline;
+ color: #527bbd;
+ padding-right: 0.5em;
+}
+div.admonitionblock td.content {
+ padding-left: 0.5em;
+ border-left: 3px solid #dddddd;
+}
+
+div.exampleblock > div.content {
+ border-left: 3px solid #dddddd;
+ padding-left: 0.5em;
+}
+
+div.imageblock div.content { padding-left: 0; }
+span.image img { border-style: none; vertical-align: text-bottom; }
+a.image:visited { color: white; }
+
+dl {
+ margin-top: 0.8em;
+ margin-bottom: 0.8em;
+}
+dt {
+ margin-top: 0.5em;
+ margin-bottom: 0;
+ font-style: normal;
+ color: navy;
+}
+dd > *:first-child {
+ margin-top: 0.1em;
+}
+
+ul, ol {
+ list-style-position: outside;
+}
+ol.arabic {
+ list-style-type: decimal;
+}
+ol.loweralpha {
+ list-style-type: lower-alpha;
+}
+ol.upperalpha {
+ list-style-type: upper-alpha;
+}
+ol.lowerroman {
+ list-style-type: lower-roman;
+}
+ol.upperroman {
+ list-style-type: upper-roman;
+}
+
+div.compact ul, div.compact ol,
+div.compact p, div.compact p,
+div.compact div, div.compact div {
+ margin-top: 0.1em;
+ margin-bottom: 0.1em;
+}
+
+tfoot {
+ font-weight: bold;
+}
+td > div.verse {
+ white-space: pre;
+}
+
+div.hdlist {
+ margin-top: 0.8em;
+ margin-bottom: 0.8em;
+}
+div.hdlist tr {
+ padding-bottom: 15px;
+}
+dt.hdlist1.strong, td.hdlist1.strong {
+ font-weight: bold;
+}
+td.hdlist1 {
+ vertical-align: top;
+ font-style: normal;
+ padding-right: 0.8em;
+ color: navy;
+}
+td.hdlist2 {
+ vertical-align: top;
+}
+div.hdlist.compact tr {
+ margin: 0;
+ padding-bottom: 0;
+}
+
+.comment {
+ background: yellow;
+}
+
+.footnote, .footnoteref {
+ font-size: 0.8em;
+}
+
+span.footnote, span.footnoteref {
+ vertical-align: super;
+}
+
+#footnotes {
+ margin: 20px 0 20px 0;
+ padding: 7px 0 0 0;
+}
+
+#footnotes div.footnote {
+ margin: 0 0 5px 0;
+}
+
+#footnotes hr {
+ border: none;
+ border-top: 1px solid silver;
+ height: 1px;
+ text-align: left;
+ margin-left: 0;
+ width: 20%;
+ min-width: 100px;
+}
+
+div.colist td {
+ padding-right: 0.5em;
+ padding-bottom: 0.3em;
+ vertical-align: top;
+}
+div.colist td img {
+ margin-top: 0.3em;
+}
+
+@media print {
+ #footer-badges { display: none; }
+}
+
+#toc {
+ margin-bottom: 2.5em;
+}
+
+#toctitle {
+ color: #527bbd;
+ font-size: 1.1em;
+ font-weight: bold;
+ margin-top: 1.0em;
+ margin-bottom: 0.1em;
+}
+
+div.toclevel0, div.toclevel1, div.toclevel2, div.toclevel3, div.toclevel4 {
+ margin-top: 0;
+ margin-bottom: 0;
+}
+div.toclevel2 {
+ margin-left: 2em;
+ font-size: 0.9em;
+}
+div.toclevel3 {
+ margin-left: 4em;
+ font-size: 0.9em;
+}
+div.toclevel4 {
+ margin-left: 6em;
+ font-size: 0.9em;
+}
+
+span.aqua { color: aqua; }
+span.black { color: black; }
+span.blue { color: blue; }
+span.fuchsia { color: fuchsia; }
+span.gray { color: gray; }
+span.green { color: green; }
+span.lime { color: lime; }
+span.maroon { color: maroon; }
+span.navy { color: navy; }
+span.olive { color: olive; }
+span.purple { color: purple; }
+span.red { color: red; }
+span.silver { color: silver; }
+span.teal { color: teal; }
+span.white { color: white; }
+span.yellow { color: yellow; }
+
+span.aqua-background { background: aqua; }
+span.black-background { background: black; }
+span.blue-background { background: blue; }
+span.fuchsia-background { background: fuchsia; }
+span.gray-background { background: gray; }
+span.green-background { background: green; }
+span.lime-background { background: lime; }
+span.maroon-background { background: maroon; }
+span.navy-background { background: navy; }
+span.olive-background { background: olive; }
+span.purple-background { background: purple; }
+span.red-background { background: red; }
+span.silver-background { background: silver; }
+span.teal-background { background: teal; }
+span.white-background { background: white; }
+span.yellow-background { background: yellow; }
+
+span.big { font-size: 2em; }
+span.small { font-size: 0.6em; }
+
+span.underline { text-decoration: underline; }
+span.overline { text-decoration: overline; }
+span.line-through { text-decoration: line-through; }
+
+div.unbreakable { page-break-inside: avoid; }
+
+
+/*
+ * xhtml11 specific
+ *
+ * */
+
+div.tableblock {
+ margin-top: 1.0em;
+ margin-bottom: 1.5em;
+}
+div.tableblock > table {
+ border: 3px solid #527bbd;
+}
+thead, p.table.header {
+ font-weight: bold;
+ color: #527bbd;
+}
+p.table {
+ margin-top: 0;
+}
+/* Because the table frame attribute is overridden by CSS in most browsers. */
+div.tableblock > table[frame="void"] {
+ border-style: none;
+}
+div.tableblock > table[frame="hsides"] {
+ border-left-style: none;
+ border-right-style: none;
+}
+div.tableblock > table[frame="vsides"] {
+ border-top-style: none;
+ border-bottom-style: none;
+}
+
+
+/*
+ * html5 specific
+ *
+ * */
+
+table.tableblock {
+ margin-top: 1.0em;
+ margin-bottom: 1.5em;
+}
+thead, p.tableblock.header {
+ font-weight: bold;
+ color: #527bbd;
+}
+p.tableblock {
+ margin-top: 0;
+}
+table.tableblock {
+ border-width: 3px;
+ border-spacing: 0px;
+ border-style: solid;
+ border-color: #527bbd;
+ border-collapse: collapse;
+}
+th.tableblock, td.tableblock {
+ border-width: 1px;
+ padding: 4px;
+ border-style: solid;
+ border-color: #527bbd;
+}
+
+table.tableblock.frame-topbot {
+ border-left-style: hidden;
+ border-right-style: hidden;
+}
+table.tableblock.frame-sides {
+ border-top-style: hidden;
+ border-bottom-style: hidden;
+}
+table.tableblock.frame-none {
+ border-style: hidden;
+}
+
+th.tableblock.halign-left, td.tableblock.halign-left {
+ text-align: left;
+}
+th.tableblock.halign-center, td.tableblock.halign-center {
+ text-align: center;
+}
+th.tableblock.halign-right, td.tableblock.halign-right {
+ text-align: right;
+}
+
+th.tableblock.valign-top, td.tableblock.valign-top {
+ vertical-align: top;
+}
+th.tableblock.valign-middle, td.tableblock.valign-middle {
+ vertical-align: middle;
+}
+th.tableblock.valign-bottom, td.tableblock.valign-bottom {
+ vertical-align: bottom;
+}
+
+
+/*
+ * manpage specific
+ *
+ * */
+
+body.manpage h1 {
+ padding-top: 0.5em;
+ padding-bottom: 0.5em;
+ border-top: 2px solid silver;
+ border-bottom: 2px solid silver;
+}
+body.manpage h2 {
+ border-style: none;
+}
+body.manpage div.sectionbody {
+ margin-left: 3em;
+}
+
+@media print {
+ body.manpage div#toc { display: none; }
+}
+
+
+</style>
+<script type="text/javascript">
+/*<![CDATA[*/
+var asciidoc = { // Namespace.
+
+/////////////////////////////////////////////////////////////////////
+// Table Of Contents generator
+/////////////////////////////////////////////////////////////////////
+
+/* Author: Mihai Bazon, September 2002
+ * http://students.infoiasi.ro/~mishoo
+ *
+ * Table Of Content generator
+ * Version: 0.4
+ *
+ * Feel free to use this script under the terms of the GNU General Public
+ * License, as long as you do not remove or alter this notice.
+ */
+
+ /* modified by Troy D. Hanson, September 2006. License: GPL */
+ /* modified by Stuart Rackham, 2006, 2009. License: GPL */
+
+// toclevels = 1..4.
+toc: function (toclevels) {
+
+ function getText(el) {
+ var text = "";
+ for (var i = el.firstChild; i != null; i = i.nextSibling) {
+ if (i.nodeType == 3 /* Node.TEXT_NODE */) // IE doesn't speak constants.
+ text += i.data;
+ else if (i.firstChild != null)
+ text += getText(i);
+ }
+ return text;
+ }
+
+ function TocEntry(el, text, toclevel) {
+ this.element = el;
+ this.text = text;
+ this.toclevel = toclevel;
+ }
+
+ function tocEntries(el, toclevels) {
+ var result = new Array;
+ var re = new RegExp('[hH]([1-'+(toclevels+1)+'])');
+ // Function that scans the DOM tree for header elements (the DOM2
+ // nodeIterator API would be a better technique but not supported by all
+ // browsers).
+ var iterate = function (el) {
+ for (var i = el.firstChild; i != null; i = i.nextSibling) {
+ if (i.nodeType == 1 /* Node.ELEMENT_NODE */) {
+ var mo = re.exec(i.tagName);
+ if (mo && (i.getAttribute("class") || i.getAttribute("className")) != "float") {
+ result[result.length] = new TocEntry(i, getText(i), mo[1]-1);
+ }
+ iterate(i);
+ }
+ }
+ }
+ iterate(el);
+ return result;
+ }
+
+ var toc = document.getElementById("toc");
+ if (!toc) {
+ return;
+ }
+
+ // Delete existing TOC entries in case we're reloading the TOC.
+ var tocEntriesToRemove = [];
+ var i;
+ for (i = 0; i < toc.childNodes.length; i++) {
+ var entry = toc.childNodes[i];
+ if (entry.nodeName.toLowerCase() == 'div'
+ && entry.getAttribute("class")
+ && entry.getAttribute("class").match(/^toclevel/))
+ tocEntriesToRemove.push(entry);
+ }
+ for (i = 0; i < tocEntriesToRemove.length; i++) {
+ toc.removeChild(tocEntriesToRemove[i]);
+ }
+
+ // Rebuild TOC entries.
+ var entries = tocEntries(document.getElementById("content"), toclevels);
+ for (var i = 0; i < entries.length; ++i) {
+ var entry = entries[i];
+ if (entry.element.id == "")
+ entry.element.id = "_toc_" + i;
+ var a = document.createElement("a");
+ a.href = "#" + entry.element.id;
+ a.appendChild(document.createTextNode(entry.text));
+ var div = document.createElement("div");
+ div.appendChild(a);
+ div.className = "toclevel" + entry.toclevel;
+ toc.appendChild(div);
+ }
+ if (entries.length == 0)
+ toc.parentNode.removeChild(toc);
+},
+
+
+/////////////////////////////////////////////////////////////////////
+// Footnotes generator
+/////////////////////////////////////////////////////////////////////
+
+/* Based on footnote generation code from:
+ * http://www.brandspankingnew.net/archive/2005/07/format_footnote.html
+ */
+
+footnotes: function () {
+ // Delete existing footnote entries in case we're reloading the footnodes.
+ var i;
+ var noteholder = document.getElementById("footnotes");
+ if (!noteholder) {
+ return;
+ }
+ var entriesToRemove = [];
+ for (i = 0; i < noteholder.childNodes.length; i++) {
+ var entry = noteholder.childNodes[i];
+ if (entry.nodeName.toLowerCase() == 'div' && entry.getAttribute("class") == "footnote")
+ entriesToRemove.push(entry);
+ }
+ for (i = 0; i < entriesToRemove.length; i++) {
+ noteholder.removeChild(entriesToRemove[i]);
+ }
+
+ // Rebuild footnote entries.
+ var cont = document.getElementById("content");
+ var spans = cont.getElementsByTagName("span");
+ var refs = {};
+ var n = 0;
+ for (i=0; i<spans.length; i++) {
+ if (spans[i].className == "footnote") {
+ n++;
+ var note = spans[i].getAttribute("data-note");
+ if (!note) {
+ // Use [\s\S] in place of . so multi-line matches work.
+ // Because JavaScript has no s (dotall) regex flag.
+ note = spans[i].innerHTML.match(/\s*\[([\s\S]*)]\s*/)[1];
+ spans[i].innerHTML =
+ "[<a id='_footnoteref_" + n + "' href='#_footnote_" + n +
+ "' title='View footnote' class='footnote'>" + n + "</a>]";
+ spans[i].setAttribute("data-note", note);
+ }
+ noteholder.innerHTML +=
+ "<div class='footnote' id='_footnote_" + n + "'>" +
+ "<a href='#_footnoteref_" + n + "' title='Return to text'>" +
+ n + "</a>. " + note + "</div>";
+ var id =spans[i].getAttribute("id");
+ if (id != null) refs["#"+id] = n;
+ }
+ }
+ if (n == 0)
+ noteholder.parentNode.removeChild(noteholder);
+ else {
+ // Process footnoterefs.
+ for (i=0; i<spans.length; i++) {
+ if (spans[i].className == "footnoteref") {
+ var href = spans[i].getElementsByTagName("a")[0].getAttribute("href");
+ href = href.match(/#.*/)[0]; // Because IE return full URL.
+ n = refs[href];
+ spans[i].innerHTML =
+ "[<a href='#_footnote_" + n +
+ "' title='View footnote' class='footnote'>" + n + "</a>]";
+ }
+ }
+ }
+},
+
+install: function(toclevels) {
+ var timerId;
+
+ function reinstall() {
+ asciidoc.footnotes();
+ if (toclevels) {
+ asciidoc.toc(toclevels);
+ }
+ }
+
+ function reinstallAndRemoveTimer() {
+ clearInterval(timerId);
+ reinstall();
+ }
+
+ timerId = setInterval(reinstall, 500);
+ if (document.addEventListener)
+ document.addEventListener("DOMContentLoaded", reinstallAndRemoveTimer, false);
+ else
+ window.onload = reinstallAndRemoveTimer;
+}
+
+}
+asciidoc.install();
+/*]]>*/
+</script>
+</head>
+<body class="article">
+<div id="header">
+<h1>Parallel Checkout Design Notes</h1>
+</div>
+<div id="content">
+<div id="preamble">
+<div class="sectionbody">
+<div class="paragraph"><p>The "Parallel Checkout" feature attempts to use multiple processes to
+parallelize the work of uncompressing the blobs, applying in-core
+filters, and writing the resulting contents to the working tree during a
+checkout operation. It can be used by all checkout-related commands,
+such as <code>clone</code>, <code>checkout</code>, <code>reset</code>, <code>sparse-checkout</code>, and others.</p></div>
+<div class="paragraph"><p>These commands share the following basic structure:</p></div>
+<div class="ulist"><ul>
+<li>
+<p>
+Step 1: Read the current index file into memory.
+</p>
+</li>
+<li>
+<p>
+Step 2: Modify the in-memory index based upon the command, and
+ temporarily mark all cache entries that need to be updated.
+</p>
+</li>
+<li>
+<p>
+Step 3: Populate the working tree to match the new candidate index.
+ This includes iterating over all of the to-be-updated cache entries
+ and delete, create, or overwrite the associated files in the working
+ tree.
+</p>
+</li>
+<li>
+<p>
+Step 4: Write the new index to disk.
+</p>
+</li>
+</ul></div>
+<div class="paragraph"><p>Step 3 is the focus of the "parallel checkout" effort described here.</p></div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_sequential_implementation">Sequential Implementation</h2>
+<div class="sectionbody">
+<div class="paragraph"><p>For the purposes of discussion here, the current sequential
+implementation of Step 3 is divided in 3 parts, each one implemented in
+its own function:</p></div>
+<div class="ulist"><ul>
+<li>
+<p>
+Step 3a: <code>unpack-trees.c:check_updates()</code> contains a series of
+ sequential loops iterating over the <code>cache_entry</code>'s array. The main
+ loop in this function calls the Step 3b function for each of the
+ to-be-updated entries.
+</p>
+</li>
+<li>
+<p>
+Step 3b: <code>entry.c:checkout_entry()</code> examines the existing working tree
+ for file conflicts, collisions, and unsaved changes. It removes files
+ and creates leading directories as necessary. It calls the Step 3c
+ function for each entry to be written.
+</p>
+</li>
+<li>
+<p>
+Step 3c: <code>entry.c:write_entry()</code> loads the blob into memory, smudges
+ it if necessary, creates the file in the working tree, writes the
+ smudged contents, calls <code>fstat()</code> or <code>lstat()</code>, and updates the
+ associated <code>cache_entry</code> struct with the stat information gathered.
+</p>
+</li>
+</ul></div>
+<div class="paragraph"><p>It wouldn’t be safe to perform Step 3b in parallel, as there could be
+race conditions between file creations and removals. Instead, the
+parallel checkout framework lets the sequential code handle Step 3b,
+and uses parallel workers to replace the sequential
+<code>entry.c:write_entry()</code> calls from Step 3c.</p></div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_rejected_multi_threaded_solution">Rejected Multi-Threaded Solution</h2>
+<div class="sectionbody">
+<div class="paragraph"><p>The most "straightforward" implementation would be to spread the set of
+to-be-updated cache entries across multiple threads. But due to the
+thread-unsafe functions in the ODB code, we would have to use locks to
+coordinate the parallel operation. An early prototype of this solution
+showed that the multi-threaded checkout would bring performance
+improvements over the sequential code, but there was still too much lock
+contention. A <code>perf</code> profiling indicated that around 20% of the runtime
+during a local Linux clone (on an SSD) was spent in locking functions.
+For this reason this approach was rejected in favor of using multiple
+child processes, which led to a better performance.</p></div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_multi_process_solution">Multi-Process Solution</h2>
+<div class="sectionbody">
+<div class="paragraph"><p>Parallel checkout alters the aforementioned Step 3 to use multiple
+<code>checkout--worker</code> background processes to distribute the work. The
+long-running worker processes are controlled by the foreground Git
+command using the existing run-command API.</p></div>
+<div class="sect2">
+<h3 id="_overview">Overview</h3>
+<div class="paragraph"><p>Step 3b is only slightly altered; for each entry to be checked out, the
+main process performs the following steps:</p></div>
+<div class="ulist"><ul>
+<li>
+<p>
+M1: Check whether there is any untracked or unclean file in the
+ working tree which would be overwritten by this entry, and decide
+ whether to proceed (removing the file(s)) or not.
+</p>
+</li>
+<li>
+<p>
+M2: Create the leading directories.
+</p>
+</li>
+<li>
+<p>
+M3: Load the conversion attributes for the entry’s path.
+</p>
+</li>
+<li>
+<p>
+M4: Check, based on the entry’s type and conversion attributes,
+ whether the entry is eligible for parallel checkout (more on this
+ later). If it is eligible, enqueue the entry and the loaded
+ attributes to later write the entry in parallel. If not, write the
+ entry right away, using the default sequential code.
+</p>
+</li>
+</ul></div>
+<div class="paragraph"><p>Note: we save the conversion attributes associated with each entry
+because the workers don’t have access to the main process' index state,
+so they can’t load the attributes by themselves (and the attributes are
+needed to properly smudge the entry). Additionally, this has a positive
+impact on performance as (1) we don’t need to load the attributes twice
+and (2) the attributes machinery is optimized to handle paths in
+sequential order.</p></div>
+<div class="paragraph"><p>After all entries have passed through the above steps, the main process
+checks if the number of enqueued entries is sufficient to spread among
+the workers. If not, it just writes them sequentially. Otherwise, it
+spawns the workers and distributes the queued entries uniformly in
+continuous chunks. This aims to minimize the chances of two workers
+writing to the same directory simultaneously, which could increase lock
+contention in the kernel.</p></div>
+<div class="paragraph"><p>Then, for each assigned item, each worker:</p></div>
+<div class="ulist"><ul>
+<li>
+<p>
+W1: Checks if there is any non-directory file in the leading part of
+ the entry’s path or if there already exists a file at the entry' path.
+ If so, mark the entry with <code>PC_ITEM_COLLIDED</code> and skip it (more on
+ this later).
+</p>
+</li>
+<li>
+<p>
+W2: Creates the file (with O_CREAT and O_EXCL).
+</p>
+</li>
+<li>
+<p>
+W3: Loads the blob into memory (inflating and delta reconstructing
+ it).
+</p>
+</li>
+<li>
+<p>
+W4: Applies any required in-process filter, like end-of-line
+ conversion and re-encoding.
+</p>
+</li>
+<li>
+<p>
+W5: Writes the result to the file descriptor opened at W2.
+</p>
+</li>
+<li>
+<p>
+W6: Calls <code>fstat()</code> or lstat()` on the just-written path, and sends
+ the result back to the main process, together with the end status of
+ the operation and the item’s identification number.
+</p>
+</li>
+</ul></div>
+<div class="paragraph"><p>Note that, when possible, steps W3 to W5 are delegated to the streaming
+machinery, removing the need to keep the entire blob in memory.</p></div>
+<div class="paragraph"><p>If the worker fails to read the blob or to write it to the working tree,
+it removes the created file to avoid leaving empty files behind. This is
+the <strong>only</strong> time a worker is allowed to remove a file.</p></div>
+<div class="paragraph"><p>As mentioned earlier, it is the responsibility of the main process to
+remove any file that blocks the checkout operation (or abort if the
+removal(s) would cause data loss and the user didn’t ask to <code>--force</code>).
+This is crucial to avoid race conditions and also to properly detect
+path collisions at Step W1.</p></div>
+<div class="paragraph"><p>After the workers finish writing the items and sending back the required
+information, the main process handles the results in two steps:</p></div>
+<div class="ulist"><ul>
+<li>
+<p>
+First, it updates the in-memory index with the <code>lstat()</code> information
+ sent by the workers. (This must be done first as this information
+ might me required in the following step.)
+</p>
+</li>
+<li>
+<p>
+Then it writes the items which collided on disk (i.e. items marked
+ with <code>PC_ITEM_COLLIDED</code>). More on this below.
+</p>
+</li>
+</ul></div>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_path_collisions">Path Collisions</h2>
+<div class="sectionbody">
+<div class="paragraph"><p>Path collisions happen when two different paths correspond to the same
+entry in the file system. E.g. the paths <em>a</em> and <em>A</em> would collide in a
+case-insensitive file system.</p></div>
+<div class="paragraph"><p>The sequential checkout deals with collisions in the same way that it
+deals with files that were already present in the working tree before
+checkout. Basically, it checks if the path that it wants to write
+already exists on disk, makes sure the existing file doesn’t have
+unsaved data, and then overwrites it. (To be more pedantic: it deletes
+the existing file and creates the new one.) So, if there are multiple
+colliding files to be checked out, the sequential code will write each
+one of them but only the last will actually survive on disk.</p></div>
+<div class="paragraph"><p>Parallel checkout aims to reproduce the same behavior. However, we
+cannot let the workers racily write to the same file on disk. Instead,
+the workers detect when the entry that they want to check out would
+collide with an existing file, and mark it with <code>PC_ITEM_COLLIDED</code>.
+Later, the main process can sequentially feed these entries back to
+<code>checkout_entry()</code> without the risk of race conditions. On clone, this
+also has the effect of marking the colliding entries to later emit a
+warning for the user, like the classic sequential checkout does.</p></div>
+<div class="paragraph"><p>The workers are able to detect both collisions among the entries being
+concurrently written and collisions between a parallel-eligible entry
+and an ineligible entry. The general idea for collision detection is
+quite straightforward: for each parallel-eligible entry, the main
+process must remove all files that prevent this entry from being written
+(before enqueueing it). This includes any non-directory file in the
+leading path of the entry. Later, when a worker gets assigned the entry,
+it looks again for the non-directories files and for an already existing
+file at the entry’s path. If any of these checks finds something, the
+worker knows that there was a path collision.</p></div>
+<div class="paragraph"><p>Because parallel checkout can distinguish path collisions from the case
+where the file was already present in the working tree before checkout,
+we could alternatively choose to skip the checkout of colliding entries.
+However, each entry that doesn’t get written would have NULL <code>lstat()</code>
+fields on the index. This could cause performance penalties for
+subsequent commands that need to refresh the index, as they would have
+to go to the file system to see if the entry is dirty. Thus, if we have
+N entries in a colliding group and we decide to write and <code>lstat()</code> only
+one of them, every subsequent <code>git-status</code> will have to read, convert,
+and hash the written file N - 1 times. By checking out all colliding
+entries (like the sequential code does), we only pay the overhead once,
+during checkout.</p></div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_eligible_entries_for_parallel_checkout">Eligible Entries for Parallel Checkout</h2>
+<div class="sectionbody">
+<div class="paragraph"><p>As previously mentioned, not all entries passed to <code>checkout_entry()</code>
+will be considered eligible for parallel checkout. More specifically, we
+exclude:</p></div>
+<div class="ulist"><ul>
+<li>
+<p>
+Symbolic links; to avoid race conditions that, in combination with
+ path collisions, could cause workers to write files at the wrong
+ place. For example, if we were to concurrently check out a symlink
+ <em>a</em> → <em>b</em> and a regular file <em>A/f</em> in a case-insensitive file system,
+ we could potentially end up writing the file <em>A/f</em> at <em>a/f</em>, due to a
+ race condition.
+</p>
+</li>
+<li>
+<p>
+Regular files that require external filters (either "one shot" filters
+ or long-running process filters). These filters are black-boxes to Git
+ and may have their own internal locking or non-concurrent assumptions.
+ So it might not be safe to run multiple instances in parallel.
+</p>
+<div class="paragraph"><p>Besides, long-running filters may use the delayed checkout feature to
+postpone the return of some filtered blobs. The delayed checkout queue
+and the parallel checkout queue are not compatible and should remain
+separate.</p></div>
+<div class="paragraph"><p>Note: regular files that only require internal filters, like end-of-line
+conversion and re-encoding, are eligible for parallel checkout.</p></div>
+</li>
+</ul></div>
+<div class="paragraph"><p>Ineligible entries are checked out by the classic sequential codepath
+<strong>before</strong> spawning workers.</p></div>
+<div class="paragraph"><p>Note: submodules’s files are also eligible for parallel checkout (as
+long as they don’t fall into any of the excluding categories mentioned
+above). But since each submodule is checked out in its own child
+process, we don’t mix the superproject’s and the submodules' files in
+the same parallel checkout process or queue.</p></div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_the_api">The API</h2>
+<div class="sectionbody">
+<div class="paragraph"><p>The parallel checkout API was designed with the goal of minimizing
+changes to the current users of the checkout machinery. This means that
+they don’t have to call a different function for sequential or parallel
+checkout. As already mentioned, <code>checkout_entry()</code> will automatically
+insert the given entry in the parallel checkout queue when this feature
+is enabled and the entry is eligible; otherwise, it will just write the
+entry right away, using the sequential code. In general, callers of the
+parallel checkout API should look similar to this:</p></div>
+<div class="listingblock">
+<div class="content">
+<pre><code>int pc_workers, pc_threshold, err = 0;
+struct checkout state;
+
+get_parallel_checkout_configs(&pc_workers, &pc_threshold);
+
+/*
+ * This check is not strictly required, but it
+ * should save some time in sequential mode.
+ */
+if (pc_workers > 1)
+ init_parallel_checkout();
+
+for (each cache_entry ce to-be-updated)
+ err |= checkout_entry(ce, &state, NULL, NULL);
+
+err |= run_parallel_checkout(&state, pc_workers, pc_threshold, NULL, NULL);</code></pre>
+</div></div>
+</div>
+</div>
+</div>
+<div id="footnotes"><hr /></div>
+<div id="footer">
+<div id="footer-text">
+Last updated
+ 2021-04-30 15:03:30 JST
+</div>
+</div>
+</body>
+</html>
diff --git a/technical/parallel-checkout.txt b/technical/parallel-checkout.txt new file mode 100644 index 000000000..e790258a1 --- /dev/null +++ b/technical/parallel-checkout.txt @@ -0,0 +1,270 @@ +Parallel Checkout Design Notes +============================== + +The "Parallel Checkout" feature attempts to use multiple processes to +parallelize the work of uncompressing the blobs, applying in-core +filters, and writing the resulting contents to the working tree during a +checkout operation. It can be used by all checkout-related commands, +such as `clone`, `checkout`, `reset`, `sparse-checkout`, and others. + +These commands share the following basic structure: + +* Step 1: Read the current index file into memory. + +* Step 2: Modify the in-memory index based upon the command, and + temporarily mark all cache entries that need to be updated. + +* Step 3: Populate the working tree to match the new candidate index. + This includes iterating over all of the to-be-updated cache entries + and delete, create, or overwrite the associated files in the working + tree. + +* Step 4: Write the new index to disk. + +Step 3 is the focus of the "parallel checkout" effort described here. + +Sequential Implementation +------------------------- + +For the purposes of discussion here, the current sequential +implementation of Step 3 is divided in 3 parts, each one implemented in +its own function: + +* Step 3a: `unpack-trees.c:check_updates()` contains a series of + sequential loops iterating over the `cache_entry`'s array. The main + loop in this function calls the Step 3b function for each of the + to-be-updated entries. + +* Step 3b: `entry.c:checkout_entry()` examines the existing working tree + for file conflicts, collisions, and unsaved changes. It removes files + and creates leading directories as necessary. It calls the Step 3c + function for each entry to be written. + +* Step 3c: `entry.c:write_entry()` loads the blob into memory, smudges + it if necessary, creates the file in the working tree, writes the + smudged contents, calls `fstat()` or `lstat()`, and updates the + associated `cache_entry` struct with the stat information gathered. + +It wouldn't be safe to perform Step 3b in parallel, as there could be +race conditions between file creations and removals. Instead, the +parallel checkout framework lets the sequential code handle Step 3b, +and uses parallel workers to replace the sequential +`entry.c:write_entry()` calls from Step 3c. + +Rejected Multi-Threaded Solution +-------------------------------- + +The most "straightforward" implementation would be to spread the set of +to-be-updated cache entries across multiple threads. But due to the +thread-unsafe functions in the ODB code, we would have to use locks to +coordinate the parallel operation. An early prototype of this solution +showed that the multi-threaded checkout would bring performance +improvements over the sequential code, but there was still too much lock +contention. A `perf` profiling indicated that around 20% of the runtime +during a local Linux clone (on an SSD) was spent in locking functions. +For this reason this approach was rejected in favor of using multiple +child processes, which led to a better performance. + +Multi-Process Solution +---------------------- + +Parallel checkout alters the aforementioned Step 3 to use multiple +`checkout--worker` background processes to distribute the work. The +long-running worker processes are controlled by the foreground Git +command using the existing run-command API. + +Overview +~~~~~~~~ + +Step 3b is only slightly altered; for each entry to be checked out, the +main process performs the following steps: + +* M1: Check whether there is any untracked or unclean file in the + working tree which would be overwritten by this entry, and decide + whether to proceed (removing the file(s)) or not. + +* M2: Create the leading directories. + +* M3: Load the conversion attributes for the entry's path. + +* M4: Check, based on the entry's type and conversion attributes, + whether the entry is eligible for parallel checkout (more on this + later). If it is eligible, enqueue the entry and the loaded + attributes to later write the entry in parallel. If not, write the + entry right away, using the default sequential code. + +Note: we save the conversion attributes associated with each entry +because the workers don't have access to the main process' index state, +so they can't load the attributes by themselves (and the attributes are +needed to properly smudge the entry). Additionally, this has a positive +impact on performance as (1) we don't need to load the attributes twice +and (2) the attributes machinery is optimized to handle paths in +sequential order. + +After all entries have passed through the above steps, the main process +checks if the number of enqueued entries is sufficient to spread among +the workers. If not, it just writes them sequentially. Otherwise, it +spawns the workers and distributes the queued entries uniformly in +continuous chunks. This aims to minimize the chances of two workers +writing to the same directory simultaneously, which could increase lock +contention in the kernel. + +Then, for each assigned item, each worker: + +* W1: Checks if there is any non-directory file in the leading part of + the entry's path or if there already exists a file at the entry' path. + If so, mark the entry with `PC_ITEM_COLLIDED` and skip it (more on + this later). + +* W2: Creates the file (with O_CREAT and O_EXCL). + +* W3: Loads the blob into memory (inflating and delta reconstructing + it). + +* W4: Applies any required in-process filter, like end-of-line + conversion and re-encoding. + +* W5: Writes the result to the file descriptor opened at W2. + +* W6: Calls `fstat()` or lstat()` on the just-written path, and sends + the result back to the main process, together with the end status of + the operation and the item's identification number. + +Note that, when possible, steps W3 to W5 are delegated to the streaming +machinery, removing the need to keep the entire blob in memory. + +If the worker fails to read the blob or to write it to the working tree, +it removes the created file to avoid leaving empty files behind. This is +the *only* time a worker is allowed to remove a file. + +As mentioned earlier, it is the responsibility of the main process to +remove any file that blocks the checkout operation (or abort if the +removal(s) would cause data loss and the user didn't ask to `--force`). +This is crucial to avoid race conditions and also to properly detect +path collisions at Step W1. + +After the workers finish writing the items and sending back the required +information, the main process handles the results in two steps: + +- First, it updates the in-memory index with the `lstat()` information + sent by the workers. (This must be done first as this information + might me required in the following step.) + +- Then it writes the items which collided on disk (i.e. items marked + with `PC_ITEM_COLLIDED`). More on this below. + +Path Collisions +--------------- + +Path collisions happen when two different paths correspond to the same +entry in the file system. E.g. the paths 'a' and 'A' would collide in a +case-insensitive file system. + +The sequential checkout deals with collisions in the same way that it +deals with files that were already present in the working tree before +checkout. Basically, it checks if the path that it wants to write +already exists on disk, makes sure the existing file doesn't have +unsaved data, and then overwrites it. (To be more pedantic: it deletes +the existing file and creates the new one.) So, if there are multiple +colliding files to be checked out, the sequential code will write each +one of them but only the last will actually survive on disk. + +Parallel checkout aims to reproduce the same behavior. However, we +cannot let the workers racily write to the same file on disk. Instead, +the workers detect when the entry that they want to check out would +collide with an existing file, and mark it with `PC_ITEM_COLLIDED`. +Later, the main process can sequentially feed these entries back to +`checkout_entry()` without the risk of race conditions. On clone, this +also has the effect of marking the colliding entries to later emit a +warning for the user, like the classic sequential checkout does. + +The workers are able to detect both collisions among the entries being +concurrently written and collisions between a parallel-eligible entry +and an ineligible entry. The general idea for collision detection is +quite straightforward: for each parallel-eligible entry, the main +process must remove all files that prevent this entry from being written +(before enqueueing it). This includes any non-directory file in the +leading path of the entry. Later, when a worker gets assigned the entry, +it looks again for the non-directories files and for an already existing +file at the entry's path. If any of these checks finds something, the +worker knows that there was a path collision. + +Because parallel checkout can distinguish path collisions from the case +where the file was already present in the working tree before checkout, +we could alternatively choose to skip the checkout of colliding entries. +However, each entry that doesn't get written would have NULL `lstat()` +fields on the index. This could cause performance penalties for +subsequent commands that need to refresh the index, as they would have +to go to the file system to see if the entry is dirty. Thus, if we have +N entries in a colliding group and we decide to write and `lstat()` only +one of them, every subsequent `git-status` will have to read, convert, +and hash the written file N - 1 times. By checking out all colliding +entries (like the sequential code does), we only pay the overhead once, +during checkout. + +Eligible Entries for Parallel Checkout +-------------------------------------- + +As previously mentioned, not all entries passed to `checkout_entry()` +will be considered eligible for parallel checkout. More specifically, we +exclude: + +- Symbolic links; to avoid race conditions that, in combination with + path collisions, could cause workers to write files at the wrong + place. For example, if we were to concurrently check out a symlink + 'a' -> 'b' and a regular file 'A/f' in a case-insensitive file system, + we could potentially end up writing the file 'A/f' at 'a/f', due to a + race condition. + +- Regular files that require external filters (either "one shot" filters + or long-running process filters). These filters are black-boxes to Git + and may have their own internal locking or non-concurrent assumptions. + So it might not be safe to run multiple instances in parallel. ++ +Besides, long-running filters may use the delayed checkout feature to +postpone the return of some filtered blobs. The delayed checkout queue +and the parallel checkout queue are not compatible and should remain +separate. ++ +Note: regular files that only require internal filters, like end-of-line +conversion and re-encoding, are eligible for parallel checkout. + +Ineligible entries are checked out by the classic sequential codepath +*before* spawning workers. + +Note: submodules's files are also eligible for parallel checkout (as +long as they don't fall into any of the excluding categories mentioned +above). But since each submodule is checked out in its own child +process, we don't mix the superproject's and the submodules' files in +the same parallel checkout process or queue. + +The API +------- + +The parallel checkout API was designed with the goal of minimizing +changes to the current users of the checkout machinery. This means that +they don't have to call a different function for sequential or parallel +checkout. As already mentioned, `checkout_entry()` will automatically +insert the given entry in the parallel checkout queue when this feature +is enabled and the entry is eligible; otherwise, it will just write the +entry right away, using the sequential code. In general, callers of the +parallel checkout API should look similar to this: + +---------------------------------------------- +int pc_workers, pc_threshold, err = 0; +struct checkout state; + +get_parallel_checkout_configs(&pc_workers, &pc_threshold); + +/* + * This check is not strictly required, but it + * should save some time in sequential mode. + */ +if (pc_workers > 1) + init_parallel_checkout(); + +for (each cache_entry ce to-be-updated) + err |= checkout_entry(ce, &state, NULL, NULL); + +err |= run_parallel_checkout(&state, pc_workers, pc_threshold, NULL, NULL); +---------------------------------------------- diff --git a/technical/partial-clone.html b/technical/partial-clone.html index 2010eaa36..e73d17e68 100644 --- a/technical/partial-clone.html +++ b/technical/partial-clone.html @@ -1213,7 +1213,7 @@ type of packfile that references it.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2020-09-03 13:19:53 PDT
+ 2020-09-04 05:19:53 JST
</div>
</div>
</body>
diff --git a/technical/protocol-capabilities.html b/technical/protocol-capabilities.html index 19fe6aad9..e6535c47b 100644 --- a/technical/protocol-capabilities.html +++ b/technical/protocol-capabilities.html @@ -1130,7 +1130,7 @@ the session ID should not rely on this fact.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2020-12-08 16:10:07 PST
+ 2020-12-09 09:10:07 JST
</div>
</div>
</body>
diff --git a/technical/protocol-common.html b/technical/protocol-common.html index cec9937e6..8b449550f 100644 --- a/technical/protocol-common.html +++ b/technical/protocol-common.html @@ -859,7 +859,7 @@ pkt-line ("0004").</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2016-08-31 14:16:00 PDT
+ 2016-09-01 06:16:00 JST
</div>
</div>
</body>
diff --git a/technical/protocol-v2.html b/technical/protocol-v2.html index 72b553c45..70a0a2122 100644 --- a/technical/protocol-v2.html +++ b/technical/protocol-v2.html @@ -1412,7 +1412,7 @@ the session ID should not rely on this fact.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2021-02-25 17:29:29 PST
+ 2021-02-26 10:29:29 JST
</div>
</div>
</body>
diff --git a/technical/racy-git.html b/technical/racy-git.html index 0e870544c..3b494fb45 100644 --- a/technical/racy-git.html +++ b/technical/racy-git.html @@ -952,7 +952,7 @@ practice anymore. This was done with commit 0fc82cff on Aug 15, <div id="footer">
<div id="footer-text">
Last updated
- 2020-03-10 08:03:13 PDT
+ 2020-03-11 00:03:13 JST
</div>
</div>
</body>
diff --git a/technical/reftable.html b/technical/reftable.html index 544baf859..234451b81 100644 --- a/technical/reftable.html +++ b/technical/reftable.html @@ -1925,8 +1925,36 @@ from being deleted.</p></div> reftable stack, reload <code>tables.list</code>, and delete any tables no longer mentioned
in <code>tables.list</code>.</p></div>
<div class="paragraph"><p>Irregular program exit may still leave about unused files. In this case, a
-cleanup operation can read <code>tables.list</code>, note its modification timestamp, and
-delete any unreferenced <code>*.ref</code> files that are older.</p></div>
+cleanup operation should proceed as follows:</p></div>
+<div class="ulist"><ul>
+<li>
+<p>
+take a lock <code>tables.list.lock</code> to prevent concurrent modifications
+</p>
+</li>
+<li>
+<p>
+refresh the reftable stack, by reading <code>tables.list</code>
+</p>
+</li>
+<li>
+<p>
+for each <code>*.ref</code> file, remove it if
+</p>
+<div class="ulist"><ul>
+<li>
+<p>
+it is not mentioned in <code>tables.list</code>, and
+</p>
+</li>
+<li>
+<p>
+its max update_index is not beyond the max update_index of the stack
+</p>
+</li>
+</ul></div>
+</li>
+</ul></div>
</div>
</div>
<div class="sect2">
@@ -2028,7 +2056,7 @@ impossible.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2021-03-02 23:05:01 PST
+ 2021-04-30 15:03:30 JST
</div>
</div>
</body>
diff --git a/technical/reftable.txt b/technical/reftable.txt index 3ef169af2..d7c3b645c 100644 --- a/technical/reftable.txt +++ b/technical/reftable.txt @@ -1011,8 +1011,13 @@ reftable stack, reload `tables.list`, and delete any tables no longer mentioned in `tables.list`. Irregular program exit may still leave about unused files. In this case, a -cleanup operation can read `tables.list`, note its modification timestamp, and -delete any unreferenced `*.ref` files that are older. +cleanup operation should proceed as follows: + +* take a lock `tables.list.lock` to prevent concurrent modifications +* refresh the reftable stack, by reading `tables.list` +* for each `*.ref` file, remove it if +** it is not mentioned in `tables.list`, and +** its max update_index is not beyond the max update_index of the stack Alternatives considered diff --git a/technical/send-pack-pipeline.html b/technical/send-pack-pipeline.html index 234792c5c..54d16da6f 100644 --- a/technical/send-pack-pipeline.html +++ b/technical/send-pack-pipeline.html @@ -827,7 +827,7 @@ closes the reading side of the pipe and fd to receive-pack.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2013-08-20 08:40:27 PDT
+ 2013-08-21 00:40:27 JST
</div>
</div>
</body>
diff --git a/technical/shallow.html b/technical/shallow.html index 70a8cda86..e381425d3 100644 --- a/technical/shallow.html +++ b/technical/shallow.html @@ -813,7 +813,7 @@ number a signed 32-bit integer can contain) means infinite depth.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2020-08-19 16:37:10 PDT
+ 2020-08-20 08:37:10 JST
</div>
</div>
</body>
diff --git a/technical/signature-format.html b/technical/signature-format.html index 89583e260..ade958150 100644 --- a/technical/signature-format.html +++ b/technical/signature-format.html @@ -997,7 +997,7 @@ Date: Wed Jun 15 09:13:29 2016 +0000 <div id="footer">
<div id="footer-text">
Last updated
- 2016-07-06 14:33:48 PDT
+ 2016-07-07 06:33:48 JST
</div>
</div>
</body>
diff --git a/technical/sparse-index.txt b/technical/sparse-index.txt new file mode 100644 index 000000000..3b24c1a21 --- /dev/null +++ b/technical/sparse-index.txt @@ -0,0 +1,208 @@ +Git Sparse-Index Design Document +================================ + +The sparse-checkout feature allows users to focus a working directory on +a subset of the files at HEAD. The cone mode patterns, enabled by +`core.sparseCheckoutCone`, allow for very fast pattern matching to +discover which files at HEAD belong in the sparse-checkout cone. + +Three important scale dimensions for a Git working directory are: + +* `HEAD`: How many files are present at `HEAD`? + +* Populated: How many files are within the sparse-checkout cone. + +* Modified: How many files has the user modified in the working directory? + +We will use big-O notation -- O(X) -- to denote how expensive certain +operations are in terms of these dimensions. + +These dimensions are ordered by their magnitude: users (typically) modify +fewer files than are populated, and we can only populate files at `HEAD`. + +Problems occur if there is an extreme imbalance in these dimensions. For +example, if `HEAD` contains millions of paths but the populated set has +only tens of thousands, then commands like `git status` and `git add` can +be dominated by operations that require O(`HEAD`) operations instead of +O(Populated). Primarily, the cost is in parsing and rewriting the index, +which is filled primarily with files at `HEAD` that are marked with the +`SKIP_WORKTREE` bit. + +The sparse-index intends to take these commands that read and modify the +index from O(`HEAD`) to O(Populated). To do this, we need to modify the +index format in a significant way: add "sparse directory" entries. + +With cone mode patterns, it is possible to detect when an entire +directory will have its contents outside of the sparse-checkout definition. +Instead of listing all of the files it contains as individual entries, a +sparse-index contains an entry with the directory name, referencing the +object ID of the tree at `HEAD` and marked with the `SKIP_WORKTREE` bit. +If we need to discover the details for paths within that directory, we +can parse trees to find that list. + +At time of writing, sparse-directory entries violate expectations about the +index format and its in-memory data structure. There are many consumers in +the codebase that expect to iterate through all of the index entries and +see only files. In fact, these loops expect to see a reference to every +staged file. One way to handle this is to parse trees to replace a +sparse-directory entry with all of the files within that tree as the index +is loaded. However, parsing trees is slower than parsing the index format, +so that is a slower operation than if we left the index alone. The plan is +to make all of these integrations "sparse aware" so this expansion through +tree parsing is unnecessary and they use fewer resources than when using a +full index. + +The implementation plan below follows four phases to slowly integrate with +the sparse-index. The intention is to incrementally update Git commands to +interact safely with the sparse-index without significant slowdowns. This +may not always be possible, but the hope is that the primary commands that +users need in their daily work are dramatically improved. + +Phase I: Format and initial speedups +------------------------------------ + +During this phase, Git learns to enable the sparse-index and safely parse +one. Protections are put in place so that every consumer of the in-memory +data structure can operate with its current assumption of every file at +`HEAD`. + +At first, every index parse will call a helper method, +`ensure_full_index()`, which scans the index for sparse-directory entries +(pointing to trees) and replaces them with the full list of paths (with +blob contents) by parsing tree objects. This will be slower in all cases. +The only noticeable change in behavior will be that the serialized index +file contains sparse-directory entries. + +To start, we use a new required index extension, `sdir`, to allow +inserting sparse-directory entries into indexes with file format +versions 2, 3, and 4. This prevents Git versions that do not understand +the sparse-index from operating on one, while allowing tools that do not +understand the sparse-index to operate on repositories as long as they do +not interact with the index. A new format, index v5, will be introduced +that includes sparse-directory entries by default. It might also +introduce other features that have been considered for improving the +index, as well. + +Next, consumers of the index will be guarded against operating on a +sparse-index by inserting calls to `ensure_full_index()` or +`expand_index_to_path()`. If a specific path is requested, then those will +be protected from within the `index_file_exists()` and `index_name_pos()` +API calls: they will call `ensure_full_index()` if necessary. The +intention here is to preserve existing behavior when interacting with a +sparse-checkout. We don't want a change to happen by accident, without +tests. Many of these locations may not need any change before removing the +guards, but we should not do so without tests to ensure the expected +behavior happens. + +It may be desirable to _change_ the behavior of some commands in the +presence of a sparse index or more generally in any sparse-checkout +scenario. In such cases, these should be carefully communicated and +tested. No such behavior changes are intended during this phase. + +During a scan of the codebase, not every iteration of the cache entries +needs an `ensure_full_index()` check. The basic reasons include: + +1. The loop is scanning for entries with non-zero stage. These entries + are not collapsed into a sparse-directory entry. + +2. The loop is scanning for submodules. These entries are not collapsed + into a sparse-directory entry. + +3. The loop is part of the index API, especially around reading or + writing the format. + +4. The loop is checking for correct order of cache entries and that is + correct if and only if the sparse-directory entries are in the correct + location. + +5. The loop ignores entries with the `SKIP_WORKTREE` bit set, or is + otherwise already aware of sparse directory entries. + +6. The sparse-index is disabled at this point when using the split-index + feature, so no effort is made to protect the split-index API. + +Even after inserting these guards, we will keep expanding sparse-indexes +for most Git commands using the `command_requires_full_index` repository +setting. This setting will be on by default and disabled one builtin at a +time until we have sufficient confidence that all of the index operations +are properly guarded. + +To complete this phase, the commands `git status` and `git add` will be +integrated with the sparse-index so that they operate with O(Populated) +performance. They will be carefully tested for operations within and +outside the sparse-checkout definition. + +Phase II: Careful integrations +------------------------------ + +This phase focuses on ensuring that all index extensions and APIs work +well with a sparse-index. This requires significant increases to our test +coverage, especially for operations that interact with the working +directory outside of the sparse-checkout definition. Some of these +behaviors may not be the desirable ones, such as some tests already +marked for failure in `t1092-sparse-checkout-compatibility.sh`. + +The index extensions that may require special integrations are: + +* FS Monitor +* Untracked cache + +While integrating with these features, we should look for patterns that +might lead to better APIs for interacting with the index. Coalescing +common usage patterns into an API call can reduce the number of places +where sparse-directories need to be handled carefully. + +Phase III: Important command speedups +------------------------------------- + +At this point, the patterns for testing and implementing sparse-directory +logic should be relatively stable. This phase focuses on updating some of +the most common builtins that use the index to operate as O(Populated). +Here is a potential list of commands that could be valuable to integrate +at this point: + +* `git commit` +* `git checkout` +* `git merge` +* `git rebase` + +Hopefully, commands such as `git merge` and `git rebase` can benefit +instead from merge algorithms that do not use the index as a data +structure, such as the merge-ORT strategy. As these topics mature, we +may enable the ORT strategy by default for repositories using the +sparse-index feature. + +Along with `git status` and `git add`, these commands cover the majority +of users' interactions with the working directory. In addition, we can +integrate with these commands: + +* `git grep` +* `git rm` + +These have been proposed as some whose behavior could change when in a +repo with a sparse-checkout definition. It would be good to include this +behavior automatically when using a sparse-index. Some clarity is needed +to make the behavior switch clear to the user. + +This phase is the first where parallel work might be possible without too +much conflicts between topics. + +Phase IV: The long tail +----------------------- + +This last phase is less a "phase" and more "the new normal" after all of +the previous work. + +To start, the `command_requires_full_index` option could be removed in +favor of expanding only when hitting an API guard. + +There are many Git commands that could use special attention to operate as +O(Populated), while some might be so rare that it is acceptable to leave +them with additional overhead when a sparse-index is present. + +Here are some commands that might be useful to update: + +* `git sparse-checkout set` +* `git am` +* `git clean` +* `git stash` diff --git a/technical/trivial-merge.html b/technical/trivial-merge.html index 7d3c80188..03ef32cb0 100644 --- a/technical/trivial-merge.html +++ b/technical/trivial-merge.html @@ -856,7 +856,7 @@ the automatic merge will generally give this effect.</p></div> <div id="footer">
<div id="footer-text">
Last updated
- 2017-09-10 01:38:46 PDT
+ 2017-09-10 17:38:46 JST
</div>
</div>
</body>
|